[command prompt] bestands grootte controleren

Pagina: 1
Acties:

  • rajackar
  • Registratie: Augustus 2000
  • Laatst online: 04-05 13:13

rajackar

Blood Minister

Topicstarter
Weet iemand of er een manier is om in windows (xp / 2000) vanaf de command promt te controleren of een bestand groter is dan een vooraf op te geven waarde?
Dit wil ik namelijk graag in een batch file verwerken maar google en got zoeken levert me niets concreets op.
TNX alvast!

Shrouded by night, but with steady stride. Colored by blood, but always clear of mind. - AMD 9800X3D - Asus RTX 5090 Astral - PS5


  • ironx
  • Registratie: Augustus 2001
  • Laatst online: 03-05 23:04
Ik kan je zo 1, 2, 3 niet helpen maar mischien wel een tip geven: 4NT (shareware).
4NT kan je als vervanger gebruiken (heb 'm zelf ook :)) van de standaard command-prompt, en bevat ontiegelijk veel extra commando's/functies...

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.


  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 17:01

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

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!!"

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


  • rajackar
  • Registratie: Augustus 2000
  • Laatst online: 04-05 13:13

rajackar

Blood Minister

Topicstarter
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!!"
TNX man!
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 8)7

Shrouded by night, but with steady stride. Colored by blood, but always clear of mind. - AMD 9800X3D - Asus RTX 5090 Astral - PS5


Verwijderd

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!!"
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.

  • rajackar
  • Registratie: Augustus 2000
  • Laatst online: 04-05 13:13

rajackar

Blood Minister

Topicstarter
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.
In mijn geval is dat geen probleem omdat er alleen naar één bepaald bestand gekeken hoeft te worden.

Ik loop alleen wel tegen een ander probleem aan:

code:
1
if 10 geq 4 echo ja

levert een ja op.

maar
code:
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


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Dir /-C zet de thousand seperator uit :)

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 17:01

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

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.
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).

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Verwijderd

je checked nu maar 1 file dus dan werkt het, maar voor een hele dir gaat alleen de laatste file gechecked worden.
Met
code:
1
dir /a-d /os
wordt de output (van alleen bestanden) gesorteerd op grootte zodat het grootste bestand onderaan staat.

  • rajackar
  • Registratie: Augustus 2000
  • Laatst online: 04-05 13:13

rajackar

Blood Minister

Topicstarter
elevator schreef op 12 juli 2004 @ 17:03:
Dir /-C zet de thousand seperator uit :)
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

Question 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).
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 heb :)
Pagina: 1