Länge von Dateiname ermitteln
Hallo Leute,
ich suche ein Progi bzw. ein Script/Batch wie in Betreff beschrieben.
details:
Ich habe einige Dutzend Ordner inkl. Unterordner wo sehr vielen Dateien sind. Hier möchte gerne wissen, welche Dateien z.B. einen längeren Dateinamen (nur Präfix ist zu berücksichtigen)
haben als 15(dieser Wert sollte "vorher" vom anwender abgefragt werden, also variabel), einen dateinamen der GLEICH 15 (auch variabel) oder dateinamen, die zwischen 2 Werten (variabel)liegen.....
Diese "Kandidaten" sollten am besten in einer Text (besser Excel)-datei aufgeführt werden. INfos hier: Pfad zur datei, Dateiname, Anzahl Zeichen, wieviel Dateien haben 15 Zeichen(leerzeichen sollen auch addiert werden) insgesamt.
Also im Grunde ein Tool, welches mir möglichst viel Infos zum Thema "Länge Dateiname (nur Präfix)" in Ordner/Rekursiv in einer Datei wieder gibt!
Für einen Tipp wäre ich sehr dankbar!
Gruß
Werner1966
ich suche ein Progi bzw. ein Script/Batch wie in Betreff beschrieben.
details:
Ich habe einige Dutzend Ordner inkl. Unterordner wo sehr vielen Dateien sind. Hier möchte gerne wissen, welche Dateien z.B. einen längeren Dateinamen (nur Präfix ist zu berücksichtigen)
haben als 15(dieser Wert sollte "vorher" vom anwender abgefragt werden, also variabel), einen dateinamen der GLEICH 15 (auch variabel) oder dateinamen, die zwischen 2 Werten (variabel)liegen.....
Diese "Kandidaten" sollten am besten in einer Text (besser Excel)-datei aufgeführt werden. INfos hier: Pfad zur datei, Dateiname, Anzahl Zeichen, wieviel Dateien haben 15 Zeichen(leerzeichen sollen auch addiert werden) insgesamt.
Also im Grunde ein Tool, welches mir möglichst viel Infos zum Thema "Länge Dateiname (nur Präfix)" in Ordner/Rekursiv in einer Datei wieder gibt!
Für einen Tipp wäre ich sehr dankbar!
Gruß
Werner1966
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 112277
Url: https://administrator.de/contentid/112277
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
4 Kommentare
Neuester Kommentar
Servus,
so aus dem Bauch heraus:
Progi=verhohnepiepung von Programm?
Gruß
so aus dem Bauch heraus:
dir /s "laufwerk:\Ordner\??????????????*.???" >laufwerk\Ordner\log.txt
Progi=verhohnepiepung von Programm?
Gruß
Hallo Werner1966 und willkommen im Forum!
Für's Erste nur ein Vorschlag, um Pfad und Dateiname für Dateien mit mehr als 15 Zeichen in eine Datei zu schreiben:
Wenn Du die entstehende Datei in Excel importierst, kannst Du mit der Funktion LÄNGE() die Zeichenanzahl des Namens ermitteln und mit ZÄHLENWENN() aus den Ergebnissen herausfiltern, wieviele Dateien es mit einer bestimmten Namenslänge gibt.
Falls Du nicht bereits vorher selektieren, sondern die Informationen für alle Dateien festhalten willst, genügt folgende Zeile 7 (ohne die übrigen Zeilen danach):
Grüße
bastla
Für's Erste nur ein Vorschlag, um Pfad und Dateiname für Dateien mit mehr als 15 Zeichen in eine Datei zu schreiben:
@echo off & setlocal
set "Ordner=D:\Test"
set "Log=D:\LangeNamen.txt"
set L=15
if exist "%Log%" del "%Log%"
for /f "delims=" %%i in ('dir /s /b /a-d "%Ordner%\*.*"') do call :ProcessFile "%%i"
goto :eof
:ProcessFile
set "Name=%~n1"
call set "Z=%%Name:~%L%%%"
if defined Z >>"%Log%" echo %~1;%~n1
goto :eof
Falls Du nicht bereits vorher selektieren, sondern die Informationen für alle Dateien festhalten willst, genügt folgende Zeile 7 (ohne die übrigen Zeilen danach):
for /f "delims=" %%i in ('dir /s /b /a-d "%Ordner%\*.*"') do >>"%Log%" echo %%i;%%~ni
bastla
Moin Werner,
zum Üben von Skripterstellung ist das eine nette Aufgabe - werde ich mal in in meinem nächsten VHS-Kurs in Kleingruppen lösen lassen.
Um aber einen der erhofften Lerneffekte der TeilnehmerInnen schon mal vorwegzunehmen:
Unabhängig wieviele Wege/Sprachen/algorithmen/Strategien zum Ziel führen könnten,
alles gleichzeitig versuchen bedeutet meistens eben auch alles halbherzig versuchen.
Hier im vorliegenden konstruierten Problem windest Du Dich auch gedanklich zwischen
---> nicht zielführend.
Ich würde also bastlas Ansatz insoweit in Richtung der zweiten Möglichkeit variieren, dass keine Folgeverarbeitung mit Excel o.ä. mehr nötig/vorgesehen ist.
Die minimalen (und hinreichenden) Änderungen führen dann hierzu:
... und folgendem Output:
- nur exakte Länge 15:
-- oder von/bis Länge 15 -17
habe bei mir auf "*.txt" statt "*.*" eingeschränkt!
Würde mir vollkommen reichen vom Komfort der Parametrisierungsmöglichkeiten her und auch vom Ergebnis.
Mit irgendwelchen Excelkanonen auf den kleinen Spatzen werfen (oder wie hieß dieses Sprichwort?) lohnt sich nicht.
Grüße
Biber
zum Üben von Skripterstellung ist das eine nette Aufgabe - werde ich mal in in meinem nächsten VHS-Kurs in Kleingruppen lösen lassen.
Um aber einen der erhofften Lerneffekte der TeilnehmerInnen schon mal vorwegzunehmen:
Unabhängig wieviele Wege/Sprachen/algorithmen/Strategien zum Ziel führen könnten,
alles gleichzeitig versuchen bedeutet meistens eben auch alles halbherzig versuchen.
Hier im vorliegenden konstruierten Problem windest Du Dich auch gedanklich zwischen
- eben mal ein Skript starten und rekursiv rumrödeln lassen
- komfortable und benutzerfreundliche geprüfte Eingabemöglichkeiten
- allumfassende optisch aufbereitete Zusammenfassung als Tabelle mit Zwischensummen
---> nicht zielführend.
- Entweder das Ziel ist eine Auswertung - die Du in der nächsten Budgetplanungsrunde so (per PowerPoint natürlich) an die Wand werfen kannst und alle Krawattenträger bringen standing ovations
- oder aber das Ziel ist eine schnelle Ad-hoc-Auswertung ("will eben mal gucken, wieviele denn...?"). Dann kannst Du bei der Optik sowohl bei Eingabe wie Output sehr sehr viel Aufwand sparen und das mit einem Oneliner vom Cmdprompt aus machen. Meinetwegen auch mit einem 10- oder 20zeiligen Batch. Aber mehr Aufwand sollte nicht entstehen als eben diese Viertelstunde.
Ich würde also bastlas Ansatz insoweit in Richtung der zweiten Möglichkeit variieren, dass keine Folgeverarbeitung mit Excel o.ä. mehr nötig/vorgesehen ist.
Die minimalen (und hinreichenden) Änderungen führen dann hierzu:
:: -------snipp FileLen.cmd
@echo off & setlocal enableDelayedExpansion
if "%1"=="" %0 15 15
if "%2"=="" %0 %1 17
set "Ordner=D:\Temp"
:: set "Log=D:\work:\LangeNamen.txt"
Set "Log=con:"
Set /a "Lmin=%1,Lmax=%2"
if exist "%Log%" del "%Log%"
For /L %%x in (%Lmin%,1, %Lmax%) do (
Set /a "Sum=0"
for /f "delims=" %%i in ('dir /s /b /a-d "%Ordner%\*.txt"') do call :ProcessFile "%%i" %%x
echo Anzahl Namen mit %%x Zeichen: !sum!
)
goto :eof
:ProcessFile
set "Name=%~n1;"
Set "Z=!name:~%2!"
if defined Z if "!name:~%2,1!"==";" set /a "sum+=1" && >>"%Log%" echo %2;%~1;%~n1
goto :eof
- nur exakte Länge 15:
>e:\schnipsel\FileLen
15;D:\Temp\DeCryptErgebnis.txt;DeCryptErgebnis
15;D:\Temp\input\jetzte001auszug.txt;jetzte001auszug
15;D:\Temp\Stp\STp925Schnipsel.txt;STp925Schnipsel
15;D:\Temp\xxx\DeCryptErgebnis.txt;DeCryptErgebnis
Anzahl Namen mit 15 Zeichen: 4
>e:\schnipsel\FileLen 15 17
15;D:\Temp\DeCryptErgebnis.txt;DeCryptErgebnis
15;D:\Temp\input\jetzte001auszug.txt;jetzte001auszug
15;D:\Temp\Stp\STp925Schnipsel.txt;STp925Schnipsel
15;D:\Temp\xxx\DeCryptErgebnis.txt;DeCryptErgebnis
Anzahl Namen mit 15 Zeichen: 4
16;D:\Temp\nerovistaNospace.txt;nerovistaNospace
16;D:\Temp\eins\nerovistaNospace.txt;nerovistaNospace
16;D:\Temp\input\vbsskripte_files.txt;vbsskripte_files
Anzahl Namen mit 16 Zeichen: 3
17;D:\Temp\Q_Createtable_NEW.txt;Q_Createtable_NEW
Anzahl Namen mit 17 Zeichen: 1
Würde mir vollkommen reichen vom Komfort der Parametrisierungsmöglichkeiten her und auch vom Ergebnis.
Mit irgendwelchen Excelkanonen auf den kleinen Spatzen werfen (oder wie hieß dieses Sprichwort?) lohnt sich nicht.
Grüße
Biber