Toon posts:

[XP] Batch file - controle van bestandsgroote

Pagina: 1
Acties:
  • 294 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Op welke manier is het mogelijk om de groote van een bepaald bestand op de c schijf op te vragen en dit te vergelijken met een voorafbepaalde waarde.

(later is het nodig dat als het bestand groter is dan een bepaalde waarde, het bestand gebackupt wordt..dit heb ik grotendeels al gevonden, het eerste hierboven dus niet...)

alvast bedankt

  • u_nix_we_all
  • Registratie: Augustus 2002
  • Niet online
Je hebt het over batch en c schijf, maar je post in NOS ?

Welk OS gaat het nu om ?

You don't need a parachute to go skydiving. You need a parachute to go skydiving twice.


Verwijderd

Topicstarter
Een Batch file gemaakt in notepad -> .bat
Om te laten runnen via scheduled tasks in windows XP
(Sorry voor de weinige informatie...)

[ Voor 5% gewijzigd door Verwijderd op 07-09-2005 14:48 ]


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Je moet het in stapjes doen:
  • Je kan met dir een filelisting doen
  • Je kan met "for" (kijk even naar for /?) een regel "parsen" en bv. het 4e "token" eruit halen
  • Je kan een waarde vergelijken met IF
Success :Y)

Verwijderd

Topicstarter
oké, maar spijtig genoeg ben ik nog maar pas begonnen...heb wel al kunnen forceren hoe ik waarden kan vergelijk en indien nodig verwijderen maar het probleem zit hoe kan/moet ik de groote van een bestand aan een variabele meegeven...heb wel wat informatie gevonden op internet maar begrijp er niet te veel van...

%~z1
hiermee zou ik de grote moeten kunnen opvragen, maar hoe juist, geen idee...
moest ik dat weten...

alvast bedankt!!

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

code:
1
for /f in (".bash_history") do @echo %~zi


Nu - met "SET" kan je een environment variabele setten, en met IF kan je vergelijken. Dan moet het toch echt lukken met enige inzet van jouw kant :)

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
> WOS

Verwijderd

Topicstarter
oké,
dat had ik ondertussen...
mijn code tot nu toe:
Probleem blijft het opvragen van de size van die test.txt file, ondanks mijn inzet (;)) lukt dit niet, hopelijk merk je aan onderstaande code dat ik wel degelijk inzet heb:)

cd\
@ECHO OFF

SET MAXSIZE=5
echo %MAXSIZE%
IF c:\test\test.txt (filesize) GEQ MAXSIZE
echo Tomcat Service will be stopped
net stop Tomcat5
echo Tomcat Service stopped
echo stdout.log will be delete
del "C:\test\test.txt"
echo stdout.log succesful deleted
echo Tomcat Service will be restarted
net start Tomcat5
echo Tomcat Service restarted
pause
exit
ELSE
pause
exit

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Ik zie in jouw batchfile helemaal niets terugkomen van mijn voorbeeld? :)

Verwijderd

Topicstarter
Die IF structuur wel toch? Maar ik begrijp niet waar die bash_history vandaan komt...
Ik weet ook steeds graag wat die code nu juist betekent...wat %~zi dus betekent weet ik niet...zou graag weten hoe dus de grote van een bestand kan vergeleken worden...wat er dus in mijn code ontbreekt...
voor alle duidelijkheid ik ben nog een noob op dit vlak...

  • Krypt
  • Registratie: April 2000
  • Laatst online: 11-12 06:55
Type die regel van Elevator maar eens in in de command prompt; en bekijk het resultaat.
Als je niet weet wat de parameters zijn voor de FOR statement moet je even FOR /? intypen. Dan krijg je een complete help (tip: .bash_history is een bestandsnaam; even vervangen voor de naam waar je de size van wilt weten).

voor de IF statement kun je IF /? doen voor help. (tip: IF werkt niet object georienteerd; batch is geen VB. En als je IF wilt laten gelden voor meerdere regels moet je de { en } gebruiken om de sectie te openen en te sluiten)

We kunnen het voorkauwen, maar dan leer je er niets van. :)

edit:
Zit trouwens een foutje in de statement van Elevator
code:
1
for /f in (".bash_history") do @echo %~zi

Mist de variable, en de "" geven aan dat het een string is terwijl het zonder aangeeft dat het een file-set is. En /f is niet nodig.
code:
1
for %i in (.bash_history) do @echo %~zi

of
code:
1
for %i in (C:\*.*) do @echo %i is %~zi bytes groot

[ Voor 42% gewijzigd door Krypt op 07-09-2005 16:15 ]

Pvouput live


Verwijderd

Topicstarter
Oké, dacht al dat er foutje was, vond overal terug dat %i er moest tussen zitten (ook in de help zelf van dos, zoals je gezegd had...)
Wanneer ik echter van die code een batch maakt, opent en sluit hij die onmiddellijk, ook met een pause...

tot nu toe heb ik volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
cd\
@ECHO OFF

SET MAXSIZE=5
echo %MAXSIZE%
:: denk dat dit fout is en code die verder staat juister...echo is hier gewoon als test
FOR %i in (test.txt) do @echo %~zi 
IF %~zi GEQ MAXSIZE
echo Tomcat Service will be stopped
net stop Tomcat5
echo Tomcat Service stopped
echo stdout.log will be delete
del "C:\test\test.txt"
echo stdout.log succesful deleted
echo Tomcat Service will be restarted
net start Tomcat5
echo Tomcat Service restarted
pause 
exit
ELSE 
pause
exit

of 
:: denk dat het zoiets zal moeten worden...op goede weg of nog niet?
for %i in (test.txt) do 
if %~zi GEQ MAXSIZE
...

  • Vaan Banaan
  • Registratie: Februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Ja, volgens mij ben je op de goede weg.
code:
1
2
for %i in (test.txt) do set bestandsgrootte=%~zi
if bestandsgrootte GEQ maxsize  goto enzovoort

Dat met else gaat in batchfiles zo niet goed. Daarvoor kun je beter met labels gaan werken.
Microsofts uitloeg over Using batch files

500 "The server made a boo boo"


  • Brahiewahiewa
  • Registratie: Oktober 2001
  • Laatst online: 30-09-2022

Brahiewahiewa

boelkloedig

Dat kan natuurlijk korter
code:
1
2
3
4
5
6
7
8
9
10
11
12
for %%f in (stdout.log) do if %%~zf LEQ 52428805 goto end
echo Tomcat Service will be stopped
net stop Tomcat5
echo Tomcat Service stopped
echo stdout.log will be deleted
del stdout.log
echo stdout.log succesful deleted
REM dat weet je natuurlijk niet zeker; iets doen met if errorlevel 1?
echo Tomcat Service will be restarted
net start Tomcat5
echo Tomcat Service restarted
:end
edit:
elevator schreef op woensdag 07 september 2005 @ 22:58:
Je moet nog even opletten dat je als je de bovenstaande statements in een batchfile gaat zetten, je de variabelen (%i in dit geval) moet ecsapen - %i wordt dan dus %%i

[ Voor 25% gewijzigd door Brahiewahiewa op 07-09-2005 23:35 . Reden: Da's waar ook ]

QnJhaGlld2FoaWV3YQ==


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Je moet nog even opletten dat je als je de bovenstaande statements in een batchfile gaat zetten, je de variabelen (%i in dit geval) moet ecsapen - %i wordt dan dus %%i :)

Verwijderd

Topicstarter
@ iedereen die hielp...allemaal al neig bedankt voor de reacties, jullie hebben me al enorm vooruit geholpen zie...
@Vanbaan die microsoft site had ik al eens overlopen, alsnog bedankt voor de tip! is idd heel nuttig!

Dit heb ik er van gemaakt:
probleem is nu dat hij steeds naar end gaat, zelfs al neem ik als waarde 1 (terwijl het bestand standaard 108 kb is). Die filesize, is dat trouwens in bytes of KB (wss bytes zeker).
Als ik daarentegen end weg doe en een goto maak (maar dan GEQ) om files te deleten dan doet hij dat ook altijd, zelfs al is de waarde kleiner...wie ziet het probleem?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cd\
@ECHO OFF
FOR %%i in (\Program Files\.......stdout.log) do if %%~zi LEQ 10 goto end


echo Tomcat Service will be stopped
net stop Tomcat5
echo Tomcat Service stopped
echo stdout.log will be delete
del "C:\Program Files\.......stdout.log"
echo stdout.log succesful deleted
echo Tomcat Service will be restarted
net start Tomcat5
echo Tomcat Service restarted
pause 
exit

:end
pause 
exit

  • Brahiewahiewa
  • Registratie: Oktober 2001
  • Laatst online: 30-09-2022

Brahiewahiewa

boelkloedig

zet de bestandsnaam tussen dubbele kwootjes
code:
1
FOR %%i in ("\Program Files\.......stdout.log") do if %%~zi LEQ 10 goto end

QnJhaGlld2FoaWV3YQ==


Verwijderd

Topicstarter
TX voor de reply, maar probleem blijft...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cd\
@ECHO OFF
FOR %%i in ("c:\Program Files\Apache Software Foundation\Tomcat 5.0\logs\stdout.log") do if %%~zi GEQ 100000000000000 goto deletefiles

:deletefiles
echo Backup of stdout.log will be made
COPY /Y C:\PROGRA~1\APACHE~1\TOMCAT~1.0\logs\stdout.log "C:\Documents and Settings\User\Desktop"
echo Tomcat Service will be stopped
net stop Tomcat5
echo Tomcat Service stopped
echo Backup of stdout.log will be made
COPY /Y C:\PROGRA~1\APACHE~1\TOMCAT~1.0\logs\stdout.log "C:\Documents and Settings\User\Desktop"
echo stdout.log will be delete
del "C:\Program Files\Apache Software Foundation\Tomcat 5.0\logs\stdout.log"
echo stdout.log succesful deleted
echo Tomcat Service will be restarted
net start Tomcat5
echo Tomcat Service restarted
pause 
exit


het bestand zelf is maar 100 kb, dus zou hij dit niet mogen deleten...toch voert hij het label: deletefiles altijd uit...damn

  • Krypt
  • Registratie: April 2000
  • Laatst online: 11-12 06:55
Labels zijn niet zoals SUBS in een programeertaal. Bij loopt gewoon batchgewijs af. Dus als ie de FOR lust heeft gedaan gaat ie naar de volgende regel, en dat is dus :deletefiles en alles wat er onder staat.

Je zou aan het einde een nieuwe label :end moeten maken en na de for lust 'goto end' moeten plaatsen.

Pvouput live


Verwijderd

Als je een if (else) constructie hebt moet je wel aangeven wat het script moet doen als er niet aan de voorwaarde wordt voldaan. Dus bijv. in "pseudocode": 'als %%i groter is dan 1000, ga naar deletefiles anders ga naar end'.

Damn... 8)7 te lang gewacht met posten. Wat Krypt hierboven zegt dus

[ Voor 22% gewijzigd door Verwijderd op 09-09-2005 15:08 ]


Verwijderd

Topicstarter
pfiew, mercikes!!! Het werkt:)
krypt & mrmenor neig bedankt ook!

@menor: wat bedoel je met die if/else? Gaat dat ook in batch files? Ik dacht uit andere posts verstaan te hebben dat dit niet gaat?


De werkende code....
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
cls
@ECHO OFF
FOR %%i in ("C:\PROGRA~1\APACHE~1\TOMCAT~1.0\logs\stdout.log") do if %%~zi GEQ 180000 goto DELETEF

:END
echo Files not deleted
pause 
exit

:DELETEF
echo Backup of stdout.log will be made
COPY /Y C:\PROGRA~1\APACHE~1\TOMCAT~1.0\logs\stdout.log "C:\Documents and Settings\User\Desktop"
echo Tomcat Service will be stopped
net stop Tomcat5
echo Tomcat Service stopped
echo stdout.log will be delete
del "C:\Program Files\Apache Software Foundation\Tomcat 5.0\logs\stdout.log"
echo stdout.log succesful deleted
echo Tomcat Service will be restarted
net start Tomcat5
echo Tomcat Service restarted
pause 
exit

Verwijderd

Verwijderd schreef op vrijdag 09 september 2005 @ 15:23:
pfiew, mercikes!!! Het werkt:)
krypt & mrmenor neig bedankt ook!

@menor: wat bedoel je met die if/else? Gaat dat ook in batch files? Ik dacht uit andere posts verstaan te hebben dat dit niet gaat?
Zoals je het nu hebt opgelost is ook een soort if/else constructie.

In batchfiles is veel mogelijk. Ook een "echte" if/else
code:
1
2
3
4
5
6
@echo off
if exist "c:\autoexec.bat" (
   echo Bestaat!!
) else (
   echo Bestaat niet!!
)
Pagina: 1