Dateiliste von Ordner mit Grössenangabe
hallo
ich möchte von mehreren Ordnern eine Seite im internet erstellen mit deren Inhalt. Bis jetzt habe ich dies so gelöst dass über den "dir"-Befehl die Dateiliste des Ordners in eine Excel-tabelle kopiert wurde und am Ende der Batch wurde die tabelle geöffnet; ich hab unter "speichern unter HTML" das ganze gespeichert und geschlossen, die batch hat im Hintergrunde gewartet und anschliessend das ganze per FTP hochgeladen.
Nun möchte ich das ganze ausbauen (und vielleicht auch vereinfachen). Ich wollte für jede Datei die Grösse dazu schreiben, für eine einzelne Daatei habe ich dies so gelöst:
Nun dachte ich mit einer TXT-Datei die über den "dir"-Befehl erstellt wurde könnte ich den Code oben automatisieren damit er die Variable %dateiname% fortlaufend ändert. Nun aber mein Problem:
bringt mir nicht die Zeile die ich bei skip eingebe, sondern immer die Letzte Zeile. Was ist daran falsch?
Da ja keine 0 dort stehen darf baue ich noch ein Header ein.
ich möchte von mehreren Ordnern eine Seite im internet erstellen mit deren Inhalt. Bis jetzt habe ich dies so gelöst dass über den "dir"-Befehl die Dateiliste des Ordners in eine Excel-tabelle kopiert wurde und am Ende der Batch wurde die tabelle geöffnet; ich hab unter "speichern unter HTML" das ganze gespeichert und geschlossen, die batch hat im Hintergrunde gewartet und anschliessend das ganze per FTP hochgeladen.
Nun möchte ich das ganze ausbauen (und vielleicht auch vereinfachen). Ich wollte für jede Datei die Grösse dazu schreiben, für eine einzelne Daatei habe ich dies so gelöst:
for %%F in ("%dateiname%") do set groesse=%%~zFset /a groessevor=groesse/1000000set /a groessenach=groessevor*1000000set /a groessenach=groesse-groessenachset /a runden=groessenach/1000set /a nulltest=groessenach/100000if %nulltest%==0 set null=0set /a groessenach=groessenach/10000set /a runden2=groessenach*10set /a runden=runden-runden2if %runden% GTR 5 set /a groessenach=groessenach+1echo Dateiname: %dateiname% %groessevor%,%null%%groessenach% MB
Nun dachte ich mit einer TXT-Datei die über den "dir"-Befehl erstellt wurde könnte ich den Code oben automatisieren damit er die Variable %dateiname% fortlaufend ändert. Nun aber mein Problem:
dir /b /on >liste.txtfor /f "skip=1 tokens=*" %%i in (liste.txt) do @set dateiname=%%i
bringt mir nicht die Zeile die ich bei skip eingebe, sondern immer die Letzte Zeile. Was ist daran falsch?
Da ja keine 0 dort stehen darf baue ich noch ein Header ein.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 42128
Url: https://administrator.de/contentid/42128
Ausgedruckt am: 26.11.2024 um 02:11 Uhr
13 Kommentare
Neuester Kommentar
Hallo weierles!
Ich würde mal sagen, da die For-Schleife alle (bis auf die erste, wegen skip=1) Zeilen der "liste.txt" durchgeht, wird die Variable "dateiname" immer wieder überschrieben, sodass am Schluss einfach der letzte Name drinnen steht.
Als Lösung könntest Du mit einem do call :Bearbeitung %%i ein passendes Unterprogramm aufrufen, wo der übergebene Dateiname dann einfach als %1 verwendet werden kann.
HTH
bastla
Ich würde mal sagen, da die For-Schleife alle (bis auf die erste, wegen skip=1) Zeilen der "liste.txt" durchgeht, wird die Variable "dateiname" immer wieder überschrieben, sodass am Schluss einfach der letzte Name drinnen steht.
Als Lösung könntest Du mit einem do call :Bearbeitung %%i ein passendes Unterprogramm aufrufen, wo der übergebene Dateiname dann einfach als %1 verwendet werden kann.
HTH
bastla
Hallo!
Ich nehme an, es ist etwa Folgendes gemeint:
HTH
bastla
Ich nehme an, es ist etwa Folgendes gemeint:
@echo off
for /f %%i in ('dir /b /on /A-d') do call :Auswertung %%i
goto Ende
:Auswertung
for %%F in ("%1") do set groesse=%%~zF
set /a groessevor=groesse/1000000
set /a groessenach=groessevor*1000000
set /a groessenach=groesse-groessenach
set /a runden=groessenach/1000
set /a nulltest=groessenach/100000
if %nulltest%==0 set null=0
set /a groessenach=groessenach/10000
set /a runden2=groessenach*10
set /a runden=runden-runden2
if %runden% GTR 5 set /a groessenach=groessenach+1
echo Dateiname: %1 %groessevor%,%null%%groessenach% MB
:Ende
HTH
bastla
Hallo weierles!
Leider muss ich Dir widersprechen - die Lösung oben ist nur ein Entwurf, der zB bei Dateien mit Leerzeichen im Namen nicht funktioniert.
Hier die verbesserte Version:
bastla
[Edit] Endgültige Fassung (wie weiter unten angemerkt) erstellt. [/Edit]
Leider muss ich Dir widersprechen - die Lösung oben ist nur ein Entwurf, der zB bei Dateien mit Leerzeichen im Namen nicht funktioniert.
Hier die verbesserte Version:
@echo off
chcp 1252 > nul
for /f "delims=" %%i in ('dir /b /on /A-d') do call :Auswertung "%%i"
goto Ende
:Auswertung
for %%F in (%1) do set groesse=%%~zF
set /a groessevor=groesse/1000000
set /a groessenach=groessevor*1000000
set /a groessenach=groesse-groessenach
set /a runden=groessenach/1000
set /a nulltest=groessenach/100000
if %nulltest%==0 set null=0
set /a groessenach=groessenach/10000
set /a runden2=groessenach*10
set /a runden=runden-runden2
if %runden% GTR 5 set /a groessenach=groessenach+1
echo Dateiname: %~1 %groessevor%,%null%%groessenach% MB
:Ende
bastla
[Edit] Endgültige Fassung (wie weiter unten angemerkt) erstellt. [/Edit]
Mal eine Frage: Warum wollt ihr das erst ins Excel importieren?
Gruß, geTuemII
::main.bat zur Ordnergroessenauswertung
@echo off
chcp 1252 > nul
echo ^<html^>^<head^>^<title^>Auswertung Datenmengen^<^/titel^>^<^/head^>^<body^>^<table border="1"^> >>auswertung.html
echo ^<tr^>^<th^>Dateiname^<^/th^>^<th^>Größe vorher^<^/th^>^<th^>Größe nachher^<^/th^>^<^/tr^> >>auswertung.html
for /f "delims=" %%i in ('dir /b /on /A-d') do call Auswertung.bat "%%i"
echo ^<^/table^>^<^/body^>^<^/html^> >>auswertung.html
:: auswertung.bat zur Ordnergroessenauswertung
:: wird von main.bat gestartet
@echo off
chcp 1252 > nul
for %%F in (%1) do set groesse=%%~zF
set /a groessevor=groesse/1000000
set /a groessenach=groessevor*1000000
set /a groessenach=groesse-groessenach
set /a runden=groessenach/1000
set /a nulltest=groessenach/100000
if %nulltest%==0 set null=0
set /a groessenach=groessenach/10000
set /a runden2=groessenach*10
set /a runden=runden-runden2
if %runden% GTR 5 set /a groessenach=groessenach+1
echo ^<tr^>^<td^>%1^<^/td^>^<td^>%groessevor% MB^<^/td^>^<td^>%null%%groessenach% MB^<^/td^>^<^/tr^> >>auswertung.html
Gruß, geTuemII