Headmasters
asked on
Batch file Help
Hi All
I am trying to create a batch file. I have setup a batch file to run some commands and output itself to log file. It works great however in the log file it displays error messages but doesnt show what there linked to (Remark)
For example
I could set the following batch file.
REM Test
"A batch command runs here"
in the log file it doesnt show REM Test. So if I get alot of errors I cant tell which is which.
Any ideas about this?
HMuser
I am trying to create a batch file. I have setup a batch file to run some commands and output itself to log file. It works great however in the log file it displays error messages but doesnt show what there linked to (Remark)
For example
I could set the following batch file.
REM Test
"A batch command runs here"
in the log file it doesnt show REM Test. So if I get alot of errors I cant tell which is which.
Any ideas about this?
HMuser
err...
echo REM Test > c:\mylogfile.log
echo REM Test > c:\mylogfile.log
REMs are for comments. If you want to have them in logs add something like
ECHO REM Test
for each REM used.
ECHO REM Test
for each REM used.
Remarks are just that, a remark within a batchfile. They don't generate any output which can be redirected to a log file.
You could add an echo to it: echo Test That should show up in the log.
You could add an echo to it: echo Test That should show up in the log.
Woops, those guys are fast ;)
You do not specify how the log file is generated and written to, but an example of how to achieve this is:
Edit the comments and commands as fit. The "echo." lines are just blank lines for readability in the logfile.
echo.
echo Starting command 1>>logfile.txt
(command1)
echo.
echo Starting command 2>>logfile.txt
(command2)
etc...
Edit the comments and commands as fit. The "echo." lines are just blank lines for readability in the logfile.
If you use only one right arrow (>) the command erases everything in the logfile. Use double right arrows (>>) to add to the file instead.
Obviously the blank lines should also be followed by >>logfile.txt. My bad...
echo. >>logfile.txt
ASKER
Cant get it to work! I'm not brill on batch files.
Basically what I have at the moment is a batch file with loads of REMs (Each site) and within each REM a command to delete files on remote machines. The command executes perfectly and log file out puts fine but it will just state the error not which site its linked to so I dont know which ones failed.
I have another file which is shown below
call "Promotions_Removal.bat" 2>"c:\TEMP\Log Files\removallog.txt"
pause
This calls my command batch file in and outputs it to the file show.
Where am I going wrong?
HMUSER
Basically what I have at the moment is a batch file with loads of REMs (Each site) and within each REM a command to delete files on remote machines. The command executes perfectly and log file out puts fine but it will just state the error not which site its linked to so I dont know which ones failed.
I have another file which is shown below
call "Promotions_Removal.bat" 2>"c:\TEMP\Log Files\removallog.txt"
pause
This calls my command batch file in and outputs it to the file show.
Where am I going wrong?
HMUSER
Another way for debugging is to NOT use @echo off at the beginning, and redirect ALL output to a log file, like with
ThisIsMyBatch.cmd >> logfile.txt 2>&1
That will redirect standard output (which contains the commands and any output of commands) and standard error (all error messages). 2>&1 has the special meaning of "use the same file as with standard output".
ThisIsMyBatch.cmd >> logfile.txt 2>&1
That will redirect standard output (which contains the commands and any output of commands) and standard error (all error messages). 2>&1 has the special meaning of "use the same file as with standard output".
I'd intercept the site/machine name on the batch and echo this name on the log.
something like:
set cSite = NewSiteNameHere
and/or
echo %NewSiteNameHere% >> logfile.txt
(commands)
something like:
set cSite = NewSiteNameHere
and/or
echo %NewSiteNameHere% >> logfile.txt
(commands)
ASKER
Ok tell me where im going wrong.
~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~
ECHO REM ##site name## 1>>"c:\TEMP\Log Files\removallog.txt"
del"\\0.0.0.0\site name\TEMP\HeadmastersPromo tions\Pict ure.bmp" 1>>"c:\TEMP\Log Files\removallog.txt"
del"\\0.0.0.1\site name\TEMP\HeadmastersPromo tions\Pict ure.bmp" 1>>"c:\TEMP\Log Files\removallog.txt"
~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~
But can't pipe out it will either only pipe out the REM. Rest wont appear!
~~~~~~~~~~~~~~~~~~~~~~~~~~
ECHO REM ##site name## 1>>"c:\TEMP\Log Files\removallog.txt"
del"\\0.0.0.0\site name\TEMP\HeadmastersPromo
del"\\0.0.0.1\site name\TEMP\HeadmastersPromo
~~~~~~~~~~~~~~~~~~~~~~~~~~
But can't pipe out it will either only pipe out the REM. Rest wont appear!
If you try to batch delete some files, as I know 'del' has no errorlevel (it returns 0 no matter).
So, what event do you expect to return the del line, to write on the log file ?
So, what event do you expect to return the del line, to write on the log file ?
ASKER
I managed to solve it.
I kept my 2nd batch file
~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~
call "Promotions_Removal.bat" 2>"c:\TEMP\Log Files\removallog.txt"
pause
~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~
and ammended it so it now looks like this...
~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~
call "Promotions_Removal.bat" >"c:\TEMP\Log Files\removallog.txt"2>&1
pause
~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~~~~~~ ~~~~~
Be nice if I could still see the cmd text while it was running, but the main thing is that its working and piping everything to a text file.
I kept my 2nd batch file
~~~~~~~~~~~~~~~~~~~~~~~~~~
call "Promotions_Removal.bat" 2>"c:\TEMP\Log Files\removallog.txt"
pause
~~~~~~~~~~~~~~~~~~~~~~~~~~
and ammended it so it now looks like this...
~~~~~~~~~~~~~~~~~~~~~~~~~~
call "Promotions_Removal.bat" >"c:\TEMP\Log Files\removallog.txt"2>&1
pause
~~~~~~~~~~~~~~~~~~~~~~~~~~
Be nice if I could still see the cmd text while it was running, but the main thing is that its working and piping everything to a text file.
The default behaviour of batch files is to echo all commands. You might have that changed? Whatsoever, you can force output by putting
@echo on
as first command in each batch file. The at prevents the echo command from being echoed.
@echo on
as first command in each batch file. The at prevents the echo command from being echoed.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
echi REM Test > c:\mylogfile.log