uzehnder
Goto Top

Die Dateigrössen aus Verschiedenen Verzeichnissen auslesen

Mit ImageMagick komprimiere ich alle z.b *jpg Grafiken/Bilder in einem Verzeichnis
und verteile diese auf verschiedene Verzeichnisse.
(je nach dem Komprimierungslevel mit gleichem Namen)

Jetzt hätte ich gerne eine Batch-Datei gebastelt, welche mir den Dateinamen und
die entsprechenen Dateigrössen in Bytes ausliest und in die "augabe.txt" schreibt.
Trotz vielem Ueben schaffe ich es aber nicht, die Variabeln aus dem Unteraufruf
"call :im" zurückzugeben...

@echo off
set "Filter=org\*.jpg"  
set "outTxT=ausgabe.txt"  
IF exist %outTxT% del %outTxT%

FOR /R %%f in (%Filter%) do set name=%%~nf%%~xf& call :im& echo "%%~nf%%~xf:%%~zf:%bgA%:%bgB%:%bgC%">>%outTxT%  
goto :EOF

:im
set "Filter2=im70\%name%"  
FOR %%g in (%Filter2%) do set bgA=%%~zg
set "Filter3=im60\%name%"  
FOR %%h in (%Filter3%) do set bgB=%%~zh
set "Filter4=im50\%name%"  
FOR %%i in (%Filter4%) do set bgC=%%~zi
goto :EOF

PAUSE
goto :EOF


Das Ergebniss sollte dann so Ausehen:
"DateiName.jpg:30553:123456:56733:78000"
Kommentar vom Moderator Biber am Nov 02, 2009 um 17:55:17 Uhr
Die Dateigrössen aus Verschiedenen Verzeichnissen auslesen
...um nicht zu sagen "Die Dateigrössen aus kürzlich Verschiedenen Verzeichnissen auslesen"...

Content-Key: 128449

Url: https://administrator.de/contentid/128449

Printed on: April 24, 2024 at 01:04 o'clock

Member: bastla
bastla Nov 02, 2009 at 12:41:39 (UTC)
Goto Top
Hallo UZehnder und willkommen im Forum!

Ungetestet etwa so:
@echo off & setlocal
set "Filter=org\*.jpg"  
set "outTxT=ausgabe.txt"  
If exist "%outTxT%" del "%outTxT%"  

FOR /R %%f in (%Filter%) do set "name=%%~nxf" & call :im %%~zf  
goto :eof

:im
set "Filter2=im70\%name%"  
for %%g in (%Filter2%) do set bgA=%%~zg
set "Filter3=im60\%name%"  
for %%h in (%Filter3%) do set bgB=%%~zh
set "Filter4=im50\%name%"  
for %%i in (%Filter4%) do set bgC=%%~zi
echo "%name%:%1:%bgA%:%bgB%:%bgC%">>%outTxT%  
goto :eof
Die jeweiligen "set"-Zeilen für "Filter2", "Filter3" und "Filter4" kannst Du eigentlich einsparen, wenn Du die Variablen nur einmalig in der folgenden Zeile benötigst - dann würde genügen:
for %%g in (im70\%name%) do set bgA=%%~zg
Es spräche auch nichts dagegen, immer die selbe Laufvariable anstelle von "%%g", "%%h" und "%%i" zu verwenden ...

Grüße
bastla
Member: 5t8d1e
5t8d1e Nov 02, 2009 at 12:45:17 (UTC)
Goto Top
Hallo,

meine Empfehlung nimm Powershell:

gci -Recurse * | ft name,Length | Out-File Aus.txt
Member: UZehnder
UZehnder Nov 02, 2009 at 13:18:05 (UTC)
Goto Top
WoW

Herzlichen Dank für die superschnelle Antwort
das funkt prima,

habs jetzt auf so umgestellt:

@echo off & setlocal
set "Filter=org\*.jpg"
set "outTxT=ausgabe.js"
If exist "%outTxT%" del "%outTxT%"

echo var bildervergleich = [>%outTxT%
FOR /R %%f in (%Filter%) do set "name=%%~nxf"& call :im %%~zf
rem goto :eof
echo "last"];bildervergleich.pop();>>%outTxT%
goto :EOF

:im
for %%f in (im70\%name%) do set bgA=%%~zf
for %%f in (im60\%name%) do set bgB=%%~zf
for %%f in (im50\%name%) do set bgC=%%~zf
echo "%name%:%1:%bgA%:%bgB%:%bgC%",>>%outTxT%
goto :eof

Ausgabe:
var bilder = [
"8020.jpg:308:296:296:296",
"8070.jpg:313:297:294:294",
"r-1030.jpg:312:295:293:293",
"r-2020.jpg:317:296:296:297",
"r-3010.jpg:308:293:295:293",
"r-9000.jpg:315:294:293:294",
"r-9050.jpg:302:293:291:291",
"r-s50.jpg:313:294:294:292",
"silberchrom.jpg:389:349:340:334",
"basic.jpg:135614:30863:26879:24375",
"DSC00024.JPG:326704:133152:95831:81653",
"DSC00033.JPG:243627:131398:105891:96904",
"last"];bildervergleich.pop();

Frage:
gäbe es eine Möglichkeit, das letzte Komma wegzulassen, damit ich mir
das
echo "last"];bildervergleich.pop();>>%outTxT%
sparen könnte?? face-smile

Gruss
Ulrich
Member: UZehnder
UZehnder Nov 02, 2009 at 13:22:20 (UTC)
Goto Top
Danke für den Tip

die Idee dahinter von mir ist,
das ganze auf normalen Windows PC's zum laufen zu bringen,
möglichst ohne zusätzliche Programme.

gruss
Ulrich
Member: bastla
bastla Nov 02, 2009 at 15:19:13 (UTC)
Goto Top
Hallo UZehnder!
gäbe es eine Möglichkeit, das letzte Komma wegzulassen
Soferne Du das allerletzte Komma meinst, etwa so (weiterhin ungetestet face-wink):
@echo off & setlocal
set "Filter=org\*.jpg"  
set "outTxT=ausgabe.js"  
If exist "%outTxT%" del "%outTxT%"  

set "Zeile="  
echo var bildervergleich = [>%outTxT%
FOR /R %%f in (%Filter%) do set "name=%%~nxf"& call :im %%~zf  
if defined Zeile echo "%Zeile%">>%outTxT%  
::echo "last"];bildervergleich.pop();>>%outTxT% 
goto :EOF

:im
if defined Zeile echo "%Zeile%",>>%outTxT%  
for %%f in (im70\%name%) do set bgA=%%~zf
for %%f in (im60\%name%) do set bgB=%%~zf
for %%f in (im50\%name%) do set bgC=%%~zf
set "Zeile=%name%:%1:%bgA%:%bgB%:%bgC%"  
goto :eof
Grüße
bastla

P.S.: Falls auch Dir die von mir verwendete Darstellung (des Batches) besser gefallen sollte: (lässt sich sogar nachträglich anwenden face-wink)
Member: UZehnder
UZehnder Nov 02, 2009 at 16:48:01 (UTC)
Goto Top
...da staunt der Laie
perfekt , vielen Dank

@echo off & setlocal
set "Filter=org\*.jpg"  
set "outTxT=ausgabe.js"  
If exist "%outTxT%" del "%outTxT%"  

set "Zeile="  
echo var bildervergleich = [>%outTxT%
FOR /R %%f in (%Filter%) do set "name=%%~nxf"& call :im %%~zf  
if defined Zeile echo "%Zeile%">>%outTxT% ];>>%outTxT%  
goto :EOF

:im
if defined Zeile echo "%Zeile%",>>%outTxT%  
for %%f in (im70\%name%) do set bgA=%%~zf
for %%f in (im60\%name%) do set bgB=%%~zf
for %%f in (im50\%name%) do set bgC=%%~zf
set "Zeile=%name%:%1:%bgA%:%bgB%:%bgC%"  
goto :eof

die ausgabe.js :

var bildervergleich = [
"8020.jpg:308:296:296:296",
"8070.jpg:313:297:294:294",
"r-1030.jpg:312:295:293:293",
"r-2020.jpg:317:296:296:297",
"r-3010.jpg:308:293:295:293",
"r-9000.jpg:315:294:293:294",
"r-9050.jpg:302:293:291:291",
"r-s50.jpg:313:294:294:292",
"silberchrom.jpg:389:349:340:334",
"basic.jpg:135614:30863:26879:24375",
"DSC00024.JPG:326704:133152:95831:81653",
"DSC00033.JPG:243627:131398:105891:96904",
"tshirt.jpg:6115:5588:4841:4009" ];

kann ich so direct in die HTML-Seite als Java-Array reinziehn

ist diese Zeile so konform? if defined Zeile echo "%Zeile%">>%outTxT% ];>>%outTxT%
falls nicht defined diese Ausgabe: ];>>%outTxT%

nochmals vielen Dank für die Lösung

Gruss
Ulrich
Member: bastla
bastla Nov 02, 2009 at 16:56:22 (UTC)
Goto Top
Hallo UZehnder!
ist diese Zeile so konform? if defined Zeile echo "%Zeile%">>%outTxT% ];>>%outTxT%
Wenn schließende Klammer und Semikolon ja auf jeden Fall (und auch nicht in eine neue Zeile) geschrieben werden sollen, genügt eigentlich
echo "%Zeile%" ];>>%outTxT%
wobei aber noch zu überlegen wäre, dass im Fall der leeren Variable %Zeile% (an dieser Stelle nur dann möglich, wenn keine einzige Datei gefunden wurde) das Ergebnis vielleicht ohnehin unbrauchbar ist ...

Grüße
bastla