Shrouded by night, but with steady stride. Colored by blood, but always clear of mind. - AMD 9800X3D - Asus RTX 5090 Astral - PS5
4NT kan je als vervanger gebruiken (heb 'm zelf ook
Zo kan je bijvoorbeeld de bestandsgrootte opvragen met de functie %@FileSize["bestandsnaam.ext"], en is dus ook makkelijk te gebruiken in batch files.
(4NT gebruikt weer .btm files, welke weer enkele voordelen hebben tegenover .bat files).
This posting is provided "AS IS" with no warranties, and confers no rights.
for /f "tokens=2,3" %a in ('dir resultaat.txt') do if %a==File(s) echo %b
Korte uitleg:
'dir resultaat.txt' geeft als output:
06-07-2004 10:52 40 resultaat.txt
1 File(s) 40 bytes
0 Dir(s) 13.031.460.864 bytes free
De tweede en derde kolom worden meegenomen in de vergelijking (tokens=2,3) en 'heten respectievelijk %a en %b. Als de tweede kolom gelijk is aan de kreet File(s) echo dan de waarde (%b).
Let erop dat in een batchfile de variabelen aangepast moeten worden naar %%a en %%b!
Door hier nog een extra regel bij te plaatsen is de door jouw gewenste vergelijking voor elkaar te krijgen:
for /f "tokens=2,3" %a in ('dir resultaat.txt') do if %a==File(s) set grootte=%b
If %grootte% GEQ 40 echo "De file is groter dan 40 Bytes!!"
MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B
TNX man!Question Mark schreef op 12 juli 2004 @ 14:57:
Je zult met een FOR lus moeten gaan stoeien:
for /f "tokens=2,3" %a in ('dir resultaat.txt') do if %a==File(s) echo %b
Korte uitleg:
'dir resultaat.txt' geeft als output:
06-07-2004 10:52 40 resultaat.txt
1 File(s) 40 bytes
0 Dir(s) 13.031.460.864 bytes free
De tweede en derde kolom worden meegenomen in de vergelijking (tokens=2,3) en 'heten respectievelijk %a en %b. Als de tweede kolom gelijk is aan de kreet File(s) echo dan de waarde (%b).
Let erop dat in een batchfile de variabelen aangepast moeten worden naar %%a en %%b!
Door hier nog een extra regel bij te plaatsen is de door jouw gewenste vergelijking voor elkaar te krijgen:
for /f "tokens=2,3" %a in ('dir resultaat.txt') do if %a==File(s) set grootte=%b
If %grootte% GEQ 40 echo "De file is groter dan 40 Bytes!!"
Aan de hand van jou voorbeeld heb ik een werkende batch file kunnen maken.
Ik had al een tijdje in de help van for zitten kijken maar het werd me pas echt duidelijk toen ik de output van een werkende for /f loop zag
Shrouded by night, but with steady stride. Colored by blood, but always clear of mind. - AMD 9800X3D - Asus RTX 5090 Astral - PS5
Verwijderd
dit werkt dus niet...for /f "tokens=2,3" %a in ('dir resultaat.txt') do if %a==File(s) set grootte=%b
If %grootte% GEQ 40 echo "De file is groter dan 40 Bytes!!"
je checked nu maar 1 file dus dan werkt het, maar voor een hele dir gaat alleen de laatste file gechecked worden.
In mijn geval is dat geen probleem omdat er alleen naar één bepaald bestand gekeken hoeft te worden.Verwijderd schreef op 12 juli 2004 @ 16:18:
[...]
dit werkt dus niet...
je checked nu maar 1 file dus dan werkt het, maar voor een hele dir gaat alleen de laatste file gechecked worden.
Ik loop alleen wel tegen een ander probleem aan:
1
| if 10 geq 4 echo ja |
levert een ja op.
maar
1
| if 10.0 geq 4 echo ja |
doet niets. En aangezien de output van het dir commando vrijwel altijd een punt bevat levert de vergelijking vrijwel altijd een ontkenning op.
Het maakt daarbij niets uit of ik geq of gtr gebruik.
Shrouded by night, but with steady stride. Colored by blood, but always clear of mind. - AMD 9800X3D - Asus RTX 5090 Astral - PS5
De vraag was ook om 1 bestand te laten controleren en niet een hele directory.Verwijderd schreef op 12 juli 2004 @ 16:18:
[...]
dit werkt dus niet...
je checked nu maar 1 file dus dan werkt het, maar voor een hele dir gaat alleen de laatste file gechecked worden.
Ook is het wel zo aan te passen dat het voor meerdere bestanden gecontroleerd kan gaan worden. Je moet dan alleen de bestandsnamen als apart token meenemen en deze in een aparte lus plaatsen.
for /f "tokens=3,4" %%a in ('dir /a-d') do call :taak %%a %%b
goto end
:taak
echo Bestand %2 is %1 aantal bytes groot!
:eof
:end
dir /a-d geeft alleen bestanden terug, geen directory's. Met de tokens filter je op bestandsnaam en grootte en deze beide waardes worden meegenomen in de lus (respectiefelijk %1 en %2). Nu heb je alleen het probleem dat er na een dir een samenvatting gegeven wordt (dezelfde waar in het vorige voorbeeld gebruik van gemaakt wordt om de "Files(s)" af te vangen).
MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B
Verwijderd
Metje checked nu maar 1 file dus dan werkt het, maar voor een hele dir gaat alleen de laatste file gechecked worden.
1
| dir /a-d /os |
En daarmee werkt het nu precies zoals het zou moeten
Bedankt allemaal!
Shrouded by night, but with steady stride. Colored by blood, but always clear of mind. - AMD 9800X3D - Asus RTX 5090 Astral - PS5
Verwijderd
lol mij hoef je niet uit te leggen hoe je het wel werkend krijgt voor 1 dir. ik heb de for loop met de call functie hier al zo vaak gepost dat ik bijna ga denken dat ik het uitgevonden hebQuestion Mark schreef op 13 juli 2004 @ 08:29:
[...]
De vraag was ook om 1 bestand te laten controleren en niet een hele directory.De TS meldt toch ook dat het al werkt?
Ook is het wel zo aan te passen dat het voor meerdere bestanden gecontroleerd kan gaan worden. Je moet dan alleen de bestandsnamen als apart token meenemen en deze in een aparte lus plaatsen.
for /f "tokens=3,4" %%a in ('dir /a-d') do call :taak %%a %%b
goto end
:taak
echo Bestand %2 is %1 aantal bytes groot!
:eof
:end
dir /a-d geeft alleen bestanden terug, geen directory's. Met de tokens filter je op bestandsnaam en grootte en deze beide waardes worden meegenomen in de lus (respectiefelijk %1 en %2). Nu heb je alleen het probleem dat er na een dir een samenvatting gegeven wordt (dezelfde waar in het vorige voorbeeld gebruik van gemaakt wordt om de "Files(s)" af te vangen).