batch liste erstellen
Hi, ich hab schon im ganzen Netz gesucht und nichts gefunden...
Da hier, wie ich finde, die besten Batch - Programmierer sind, bin ich mit meiner Frage hierhergekommen....
Ich habe schon Teile meiner Batch, aber mir fehlt halt noch sehr viel...
Ich möchte den Ordnerinhalt in eine .txt Datei speichern (was nicht gerade schwer ist!)
Nun soll die txt Datei folgendermaßen aussehen:
Dateiname Größe Dateityp
A
B
C
D
Datei 1 2mb txt
Datei 2 10mb pdf
E
Einleitung 15mb html
F
.
.
.
Und so weiter...
also soll der Dateiname unter dem jeweiligen Buchstaben eingetragen werden...
Die Größen und Dateitypen sollten möglichst alle untereinander stehen..
Hoffe sehr, das ihr mir helfen könnt!
Vielen Dank schonmal vorweg!
mfg maxxer
Da hier, wie ich finde, die besten Batch - Programmierer sind, bin ich mit meiner Frage hierhergekommen....
Ich habe schon Teile meiner Batch, aber mir fehlt halt noch sehr viel...
Ich möchte den Ordnerinhalt in eine .txt Datei speichern (was nicht gerade schwer ist!)
Nun soll die txt Datei folgendermaßen aussehen:
Dateiname Größe Dateityp
A
B
C
D
Datei 1 2mb txt
Datei 2 10mb pdf
E
Einleitung 15mb html
F
.
.
.
Und so weiter...
also soll der Dateiname unter dem jeweiligen Buchstaben eingetragen werden...
Die Größen und Dateitypen sollten möglichst alle untereinander stehen..
Hoffe sehr, das ihr mir helfen könnt!
Vielen Dank schonmal vorweg!
mfg maxxer
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 84233
Url: https://administrator.de/forum/batch-liste-erstellen-84233.html
Ausgedruckt am: 12.04.2025 um 09:04 Uhr
21 Kommentare
Neuester Kommentar
Hallo maxxer und willkommen im Forum!
Danke für die Vorschusslorbeeren - schaun mer mal, ob die sich auch verdienen lassen ...
Mit gewissen Einschränkungen sollte folgendes Batch-Gerüst etwa das von Dir gewünschte Ergebnis erzeugen:
Die genannten Einschränkungen betreffen einerseits den Dateinamen (für Sonderzeichen , vor allem "&", im Namen ist derzeit nicht vorgesorgt bzw wäre die spaltengerechte Formatierung etwas aufwändiger; die Spaltenbreite ist außerdem vorweg anzugeben, im Beispiel oben 40 Zeichen), andererseits die Berechnung der Dateigröße in MB - ist eine Datei größer als 2.147.483.647 Byte, kann die Umrechnung in MB nicht mehr (fehlerfrei) vorgenommen werden.
Der oben dargestellte Batch ist zum Aufruf mit Übergabe des aufzulistenden Ordnerpfades gedacht.
Grüße
bastla
P.S.: Besser ginge es mit einem VBScript (welches sich auch in den Batch integrieren ließe).
Danke für die Vorschusslorbeeren - schaun mer mal, ob die sich auch verdienen lassen ...
Mit gewissen Einschränkungen sollte folgendes Batch-Gerüst etwa das von Dir gewünschte Ergebnis erzeugen:
@echo off & setlocal
set "Ordner=%~1"
if %Ordner:~-1%==\ set "Ordner=%Ordner:~0,-1%"
for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
echo\
echo %%i
for /f "delims=" %%a in ('dir /b /on /a-d "%Ordner%\%%i*.*" 2^>nul') do call :ProcessFile "%Ordner%\%%a"
)
goto :eof
:ProcessFile
set "DName=%~n1 "
set "DTyp=%~x1"
set /a "DMB=%~z1/1024/1024"
set "DGr= %DMB%"
echo %DName:~0,40%%DGr:~-6%mb %DTyp:.=%
goto :eof
Der oben dargestellte Batch ist zum Aufruf mit Übergabe des aufzulistenden Ordnerpfades gedacht.
Grüße
bastla
P.S.: Besser ginge es mit einem VBScript (welches sich auch in den Batch integrieren ließe).
Hallo maxxer!
Da diese Version als Demo gedacht war, erfolgt derzeit nur eine Bildschirmausgabe.
Zum Schreiben in eine Datei einfach am Anfang (nach der ersten "set"-Zeile)
hinzufügen und die vorletzte Zeile ändern auf
Grüße
bastla
Da diese Version als Demo gedacht war, erfolgt derzeit nur eine Bildschirmausgabe.
Zum Schreiben in eine Datei einfach am Anfang (nach der ersten "set"-Zeile)
set "Liste=D:\Dateiliste.txt"
if exist "%Liste%" del "%Liste%"
echo %DName:~0,40%%DGr:~-6%mb %DTyp:.=%>>"%Liste%"
Grüße
bastla
Hallo maxxer!
Bis auf die Tatsache, dass auch die beiden Zeilen
noch eine Umleitung benötigen und daher so aussehen sollten
damit auch die einleitenden Buchstaben und die Leerzeilen in die Datei geschrieben werden, gibt es mit dem Erstellen der Listendatei auf D: bei mir kein Problem.
Nur zur Sicherheit: Du hast auch beim Starten den gewünschten Ordner angegeben? Wenn der Batch zB als "MacheListe.cmd" gespeichert ist, wäre er etwa so zu starten:
Beim Deinem Code fehlen übrigens diverse Leerzeichen in den Zeilen
und
Diese Leerzeichen sind für die Ausrichtung der Spalten erforderlich.
Mit " - _" sollte es keine Probleme geben.
Grüße
bastla
Bis auf die Tatsache, dass auch die beiden Zeilen
echo\
echo %%i
echo\>>"%Liste%"
echo %%i>>"%Liste%"
Nur zur Sicherheit: Du hast auch beim Starten den gewünschten Ordner angegeben? Wenn der Batch zB als "MacheListe.cmd" gespeichert ist, wäre er etwa so zu starten:
MacheListe D:\Test
set "DName=%~n1 "
set "DGr= %DMB%"
Mit " - _" sollte es keine Probleme geben.
Grüße
bastla
Hallo maxxer!
Auch (oder besonders) als Anfänger ist es empfehlenswert, Batchdateien von der Kommandozeile (Start / Ausführen / cmd) zu testen - so kannst Du wesentlich besser nachvollziehen, wie der Batch abläuft und welche Fehlermeldungen ausgegeben werden. Diese Art des Startens hatte ich eigentlich gemeint.
Es gibt aber auch anderen Möglichkeiten: Du kannst Drag & Drop verwenden (also einfach aus dem Explorer einen Ordner auf die Batchdatei ziehen) oder, zumindest zum Testen, den gewünschten Ordner in die Zeile 2 schreiben, also etwa
Zum "goto :eof" - damit wird ein Batch (oder ein Unterprogramm, wie ":ProcessFile") beendet ("eof" steht für "end of file" und bedeutet also einen Sprung ans Ende des Batches).
Hier noch einmal der gesamte Batch (mit einer minimalen Änderung):
Grüße
bastla
P.S.: Damit beim Posten keine Leerzeichen verloren gehen, gibt es hier -Tags ...
Auch (oder besonders) als Anfänger ist es empfehlenswert, Batchdateien von der Kommandozeile (Start / Ausführen / cmd) zu testen - so kannst Du wesentlich besser nachvollziehen, wie der Batch abläuft und welche Fehlermeldungen ausgegeben werden. Diese Art des Startens hatte ich eigentlich gemeint.
Es gibt aber auch anderen Möglichkeiten: Du kannst Drag & Drop verwenden (also einfach aus dem Explorer einen Ordner auf die Batchdatei ziehen) oder, zumindest zum Testen, den gewünschten Ordner in die Zeile 2 schreiben, also etwa
set "Ordner=D:\Test"
Hier noch einmal der gesamte Batch (mit einer minimalen Änderung):
@echo off & setlocal
set "Ordner=%~1"
set "Liste=D:\Dateiliste.txt"
if exist "%Liste%" del "%Liste%"
if %Ordner:~-1%==\ set "Ordner=%Ordner:~0,-1%"
for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
echo %%i>>"%Liste%"
for /f "delims=" %%a in ('dir /b /on /a-d "%Ordner%\%%i*.*" 2^>nul') do call :ProcessFile "%Ordner%\%%a"
echo\>>"%Liste%"
)
goto :eof
:ProcessFile
set "DName=%~n1 "
set "DTyp=%~x1"
set /a "DMB=%~z1/1024/1024"
set "DGr= %DMB%"
echo %DName:~0,40%%DGr:~-6%mb %DTyp:.=%>>"%Liste%"
goto :eof
Grüße
bastla
P.S.: Damit beim Posten keine Leerzeichen verloren gehen, gibt es hier -Tags ...
Hallo maxxer!
Für die von Dir beschriebene Fehlermeldung gibt es nur eine Erklärung: Die Variable %Ordner% hat keinen Inhalt, weil Du keinen Ordner angegeben/übergeben hast.
Magst Du es daher nochmals mit einer der beschriebenen Methoden "Kommandozeile", "Drag & Drop" oder Eintragen des gewünschten Pfades direkt in den Batch versuchen?
Grüße
bastla
Für die von Dir beschriebene Fehlermeldung gibt es nur eine Erklärung: Die Variable %Ordner% hat keinen Inhalt, weil Du keinen Ordner angegeben/übergeben hast.
Magst Du es daher nochmals mit einer der beschriebenen Methoden "Kommandozeile", "Drag & Drop" oder Eintragen des gewünschten Pfades direkt in den Batch versuchen?
Grüße
bastla
Hallo maxxer!
In %DName% stehen der Dateiname und eine Menge Leerzeichen - die ersten 40 Stellen davon werden ausgegeben (das wäre also der Teil "%DName:~0,40%").
%DGr% enthält einige Leerzeichen und danach die Dateigröße als Zahl - hier werden die letzten 6 Stellen (wegen -6) ausgegeben (für eine Datei mit 12 MB also zB 4 Leerzeichen und die Zahl 12 - das macht der Teil "%DGr:~-6%").
Dahinter folgt der fixe Text "mb" und ein Leerzeichen, und dann noch der Dateityp (%DTyp%, Inhalt zb ".txt"), von dem wir allerdings den Punkt nicht wollen und diesen daher durch Nichts (steht zwischen dem "=" und dem "%"
) ersetzen (%DTyp:.=%).
Wenn Du also zwischen der Dateigröße und dem Typ mehr als nur ein Leerzeichen willst, schaffst Du das (bin ich mir sicher) jetzt auch selbst ...
Ach ja, damit die so erstellte Zeile an die Dateiliste angefügt wird, kommt dann noch: >>"%Liste%"
Grüße
bastla
Nur kann man den Abstand zwischen der Dateigröße und dem Dateitypen etwas größer sein?
Um vielleicht Deine zukünftige Batcher-Karriere etwas zu fördern, eine etwas genauere Erklärung der folgenden Zeile (dann kannst Du die Ausgabe leicht anpassen):echo %DName:~0,40%%DGr:~-6%mb %DTyp:.=%>>"%Liste%"
%DGr% enthält einige Leerzeichen und danach die Dateigröße als Zahl - hier werden die letzten 6 Stellen (wegen -6) ausgegeben (für eine Datei mit 12 MB also zB 4 Leerzeichen und die Zahl 12 - das macht der Teil "%DGr:~-6%").
Dahinter folgt der fixe Text "mb" und ein Leerzeichen, und dann noch der Dateityp (%DTyp%, Inhalt zb ".txt"), von dem wir allerdings den Punkt nicht wollen und diesen daher durch Nichts (steht zwischen dem "=" und dem "%"
Wenn Du also zwischen der Dateigröße und dem Typ mehr als nur ein Leerzeichen willst, schaffst Du das (bin ich mir sicher) jetzt auch selbst ...
Ach ja, damit die so erstellte Zeile an die Dateiliste angefügt wird, kommt dann noch: >>"%Liste%"
Grüße
bastla
Hallo maxxer!
Freut mich wenn's geholfen hat ...
Die Ergänzung um Ziffern oder zB auch Sonderzeichen kannst Du in der Zeile
vornehmen - dabei ist nur zu beachten, dass jeweils ein Leerzeichen als Trennzeichen gesetzt werden muss.
Grüße
bastla
Freut mich wenn's geholfen hat ...
Die Ergänzung um Ziffern oder zB auch Sonderzeichen kannst Du in der Zeile
for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
Grüße
bastla
Hallo maxxer!

Dazu den folgenden Block nach der Zeile "if %Ordner..." einfügen:
Grüße
bastla
Ich möchte aber gerne eine Kategorie die 1-9 heißt, in die alle Zahlen hinein getragen werden..
Ich biete Dir sogar 0-9 ... Dazu den folgenden Block nach der Zeile "if %Ordner..." einfügen:
echo 0-9>>"%Liste%"
for %%i in (0 1 2 3 4 5 6 7 8 9) do (
for /f "delims=" %%a in ('dir /b /on /a-d "%Ordner%\%%i*.*" 2^>nul') do call :ProcessFile "%Ordner%\%%a"
)
echo\>>"%Liste%"
Grüße
bastla
Hallo maxxer!
Wenn tatsächlich nur der Dateiname (ohne Hinweis darauf, in welchem Unterordner sich die Datei befindet) ausgegeben werden soll, dann etwa so:
Die Sortierung innerhalb eines Buchstabens funktioniert nur auf Ordnerebene - es werden daher zB zunächst alle mit A beginnenden Dateien des übergebenen Ordners sortiert ausgegeben, danach jene des ersten Unterordners (bezogen auf den Unterordner sortiert), dann die des nächsten Unterordners and so on ...
Grüße
bastla
Wenn tatsächlich nur der Dateiname (ohne Hinweis darauf, in welchem Unterordner sich die Datei befindet) ausgegeben werden soll, dann etwa so:
@echo off & setlocal
set "Ordner=%~1"
set "Liste=D:\Dateiliste.txt"
if exist "%Liste%" del "%Liste%"
if %Ordner:~-1%==\ set "Ordner=%Ordner:~0,-1%"
echo 0-9>>"%Liste%"
for %%i in (0 1 2 3 4 5 6 7 8 9) do (
for /f "delims=" %%a in ('dir /s /b /on /a-d "%Ordner%\%%i*.*" 2^>nul') do call :ProcessFile "%%a"
)
echo\>>"%Liste%"
for %%i in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
echo %%i>>"%Liste%"
for /f "delims=" %%a in ('dir /s /b /on /a-d "%Ordner%\%%i*.*" 2^>nul') do call :ProcessFile "%%a"
echo\>>"%Liste%"
)
goto :eof
:ProcessFile
set "DName=%~n1 "
set "DTyp=%~x1"
set /a "DMB=%~z1/1024/1024"
set "DGr= %DMB%"
echo %DName:~0,40%%DGr:~-6%mb %DTyp:.=%>>"%Liste%"
goto :eof
Grüße
bastla