[DOS] batch output naar file & screen

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

Acties:
  • 0 Henk 'm!

Anoniem: 28735

Topicstarter
Ik heb een simpel batch bestandje gemaakt om directories te wissen.
Graag zou ik een log file bij willen houden waar de screen output in komt te staan.
Ik heb meerdere mogelijkheden gezien, maar dan is er geen screen output meer en kan er ook geen user input ingevoerd worden.

Weet iemand hoe ik in dos (xp) de screen output zowel op mijn scherm als in een text bestand kan laten wegschrijven.

Acties:
  • 0 Henk 'm!

Anoniem: 44568

start > uitvoeren
naambatchfile.bat > filenaamoutput.txt

en anders in je batchfile gebruik maken van ">" output redirectie:

inhoud van bijv. dellog.bat :
code:
1
deltree c:\temp > deltree.log

Acties:
  • 0 Henk 'm!

  • Duinkonijn
  • Registratie: Augustus 2001
  • Laatst online: 18:46

Duinkonijn

Huh?

Anoniem: 44568 schreef op 19 mei 2004 @ 09:10:
start > uitvoeren
naambatchfile.bat > filenaamoutput.txt

en anders in je batchfile gebruik maken van ">" output redirectie:

inhoud van bijv. dellog.bat :
code:
1
deltree c:\temp > deltree.log
mm maar dan heeft hij nog geen view van output

en win xp heeft geen deltree meer

Het is makkelijk om iemand zijn negatieve eigenschappen te benoemen, maar kan je ook de positieve eigenschappen benoemen?


Acties:
  • 0 Henk 'm!

  • Paul
  • Registratie: September 2000
  • Laatst online: 14:15
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
29
30
31
32
33
34
35
@echo off

rem initialiseren totaalfile
echo Uitvoer $0 : > totaalfile.txt

rem uitvoer naar file en dan file weergeven
echo blaat > newfile.txt
type newfile.txt | more

rem uitvoer aan uiteindelijke bestand toevoegen en
rem onderdruk de "1 file(s) copied" melding
copy totaalfile.txt + newfile.txt totaalfile.txt > null

rem iets vragen aan users
choice -(params kwijt :P) Weet U het zeker?
if ERRORLEVEL=255 then goto lbl255
if ERRORLEVEL=254 then goto ergens_anders

rem gebruiker wil zus
:lbl255
echo Hoi > newfile.txt
type newfile
copy totaalfile.txt + newfile.txt totaalfile.txt > null
goto einde

rem gebruiker wil zo
:ergens_anders
echo Melp > newfile.txt
type newfile
copy totaalfile.txt + newfile.txt totaalfile.txt > null
goto einde

rem opruimen
:einde
del newfile.txt

Zoiets? Userinput, output naar scherm en output naar file :)

Ik meen me ook nog te herinneren dat je met errorlevels moet oppassen, als errorlevel x is, dan is het errorlevel meteen ook alles boven x :) Dus met de hoogste optie beginnen, en als je geen goto gebruikt bij lagere waardes de hogere waarde afvangen.

[ Voor 9% gewijzigd door Paul op 19-05-2004 09:42 ]

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Voor een eenvoudige oplossing zonder aanpassingen in de batchfile kun je gebruik maken van de UNIX utility `tee`; te vinden op http://unxutils.sf.net/ Dan kun je je batchfile als volgt aanroepen:
bestand.bat | tee logfile.log
Vervolgens wordt alle schermoutput ook naar een bestand gelogd :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

Anoniem: 57365

Duinkonijn schreef op 19 mei 2004 @ 09:31:
[...]

mm maar dan heeft hij nog geen view van output

en win xp heeft geen deltree meer
echo iets >> temp.txt
notepad temp.txt (of type idd :))

user input in batch kan alleen naar een variable

set /p test=<user input>
echo %test%
<user input>

[ Voor 16% gewijzigd door Anoniem: 57365 op 19-05-2004 17:14 ]


Acties:
  • 0 Henk 'm!

Anoniem: 57365

Paul Nieuwkamp schreef op 19 mei 2004 @ 09:40:
[code]
Ik meen me ook nog te herinneren dat je met errorlevels moet oppassen, als errorlevel x is, dan is het errorlevel meteen ook alles boven x :) Dus met de hoogste optie beginnen, en als je geen goto gebruikt bij lagere waardes de hogere waarde afvangen.
if errorlevel 2 >>> errorlevel 2 en hoger (let op geen "="!)
if %errorlevel%==1 >>> alleen errorlevel 1

Acties:
  • 0 Henk 'm!

  • Bas_je
  • Registratie: Augustus 2003
  • Laatst online: 03-03 16:19
stop er dan 2 regels bij in je bat bestand, 1 voor het zetten in de logfile en de andere voor het weergeven op je beeldscherm:
code:
1
echo Naar File > tekst.txt
code:
1
echo Naar Scherm

zoiets?

[ Voor 4% gewijzigd door Bas_je op 19-05-2004 18:20 ]

while ( !$succeed ) { $try++ }


Acties:
  • 0 Henk 'm!

  • Paul
  • Registratie: September 2000
  • Laatst online: 14:15
Dat werkt alleen bij echo :)

Tevens is het (in dit geval, met je > redirect) makkelijker vervolgens 'type tekst.txt' te gebruiken, dan staat betreffende regel maar 1x in het batch-bestand :)

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


Acties:
  • 0 Henk 'm!

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

Je mikt bijvoorbeeld eerst de output naar file:
del *.mp3 > delfile.txt

Daarna mik je de inhoud van die file naar screen:
type delfile.txt |more

Waarom moeilijk als't makkelijk kan >:)

Ey!! Macarena \o/


Acties:
  • 0 Henk 'm!

  • Rubert
  • Registratie: Juli 2008
  • Laatst online: 24-06 19:53
Het is al een hele tijd geleden geleden dat er op dit topic is gereageerd, maar ik had toch een vraag naar aanleiding van de reactie van RaZ.

Op dit moment ben ik namelijk bezig met een batch bestandje dat bestanden verwijderd. Nu wil ik graag de verwijderacties in een logbestandje wegschrijven.
Als ik: DEL bestandsnaam.txt > delfile.txt of: DEL bestandsnaam.txt >> delfile.txt 2>&1 gebruik, komt er niks in het logbestand, waarschijnlijk omdat hij ook geen output geeft.

Hoe krijg ik dit wel in de logfile? Het liefst zowel de melding dat een bestand verwijderd is, als de melding dat een bestand niet gevonden is.

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

wat dacht je van beginnen met het volgende commando, zodat je er zelf achter komt hoe je del kan laten outputten wat hij doet?

DEL /?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Rubert
  • Registratie: Juli 2008
  • Laatst online: 24-06 19:53
Daar staat toch niks over de output?
/p = vraagt om bevesiting
/f = forceert verw. alleen lezen
/s = verw. uit alle submappen
/q = stille modus
/a = selecteren op basis van kenmerken

Geen van bovenstaande doet wat ik hierboven bedoelde volgens mij?

Acties:
  • 0 Henk 'm!

Anoniem: 57365

tja del heeft inderdaad geen output bij het deleten van 1 file, lastig. Dus zelf even schrijven, zoiets... (niks getest, dus geen garanties :P)

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
29
if exist bestandlist.txt del bestandlist.txt
set count=1

:ask
%count%. Welke file wil je deleten? (enter als je geen andere files meer wilt deleten)
set /p temp=
if "%temp%"=="" goto :startdel
echo %temp%>>bestandlist.txt
set count += 1
goto :ask

:startdel

for /f "tokens=1" %%a in (bestandlist.txt) do call :delfile %%a
goto :eof

:delfile

set filenaam=%1
del %filenaam%
if not %errorlevel%==0 goto :logerror %filenaam%
Echo %filenaam% was deleted successfully
Echo %date% %filenaam% was deleted successfully >>logfile.txt
goto :eof

:logerror
Echo an error occured while deleting %filenaam%.
Echo %date% an error occured while deleting %filenaam% >>logfile.txt
goto :eof

[ Voor 85% gewijzigd door Anoniem: 57365 op 30-07-2008 14:11 ]


Acties:
  • 0 Henk 'm!

  • Rubert
  • Registratie: Juli 2008
  • Laatst online: 24-06 19:53
Bedankt voor je reactie, staan wel wat nuttige dingen voor me in.
Had zelf ondertussen zelf ook al wat in elkaar geknutseld:

code:
1
2
3
4
5
6
7
8
9
10
11
12
SET DIR=C:\temp\

FOR /F %%a in (bestandlijst.txt) do (

IF EXIST %DIR%%%a (
    ECHO %DATE% %TIME% Bestand %DIR%%%a is gevonden en wordt verwijderd! >> verwijder_bestanden.txt
    DEL %DIR%%%a
) ELSE (
    ECHO %DATE% %TIME% Bestand %DIR%%%a is niet gevonden en kan niet worden verwijderd! >> verwijder_bestanden.txt

)
)

Acties:
  • 0 Henk 'm!

Anoniem: 57365

enige nadeel van je script is dat je niet zeker weet of tie echt verwijderd wordt (bijv. bij file-in-use ofzo) en wat heb je aan logging als je niet weet of die correct is :). Met een errorlevel = 0 check na de delete actie weet je dat wel zeker.

Zie overigens nog iets wat niet helemaal lekker is.

Je zet je dir en logged je dir, maar je hebt geen garanties dat je %dir% ook werkelijk dezelfde dir is als waar dit script draait.

na je set een pushd %DIR% doen en aan het einde een popd. Of een cd /d %dir% na je set. (vergeet dan niet je bestandlijst.txt met fullpath te vermelden).

[ Voor 54% gewijzigd door Anoniem: 57365 op 31-07-2008 11:32 ]

Pagina: 1