There has been variants of this question asked for generations, but despite writing some quite complicated Windows scripts, I can't seem to find out how to make them actually silent.
The following is an excerpt from one of my current scripts:
@ECHO OFF
SET scriptDirectory=%~dp0
COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat
FOR /F %%f IN ('dir /B "%scriptDirectory%*.noext"') DO (
del "%scriptDirectory%%%f"
)
ECHO
The result of this is:
C:\Temp> test.bat
1 file(s) copied.
File Not Found
Echo is off.
C:\Temp>
Whereas the "1 file(s) copied." is just annoying, the "File Not Found" makes the user think that something has gone wrong (which it hasn't - no files is fine).
Copies a directory named html & all its contents to a destination directory in silent mode. If the destination directory is not present it will still create it.
/S Copies directories and subdirectories except empty ones.
/E Copies directories and subdirectories, including empty ones. Same as /S /E. May be used to modify /T.
/I If destination does not exist and copying more than one file, assumes that destination must be a directory.
If you want that all normal output of your Batch script be silent (like in your example), the easiest way to do that is to run the Batch file with a redirection:
This method does not require to modify a single line in the script and it still show error messages in the screen. To supress all the output, including error messages:
If your script have lines that produce output you want to appear in screen, perhaps will be simpler to add redirection to those lineas instead of all the lines you want to keep silent:
Antonio
To suppress output, use redirection to
NUL
.There are two kinds of output that console commands use:
standard output, or
stdout
,standard error, or
stderr
.Of the two,
stdout
is used more often, both by internal commands, likecopy
, and by console utilities, or external commands, likefind
and others, as well as by third-party console programs.>NUL
suppresses the standard output and works fine e.g. for suppressing the1 file(s) copied.
message of thecopy
command. An alternative syntax is1>NUL
. So,or
or
or
suppresses all of
COPY
's standard output.To suppress error messages, which are typically printed to
stderr
, use2>NUL
instead. So, to suppress aFile Not Found
message thatDEL
prints when, well, the specified file is not found, just add2>NUL
either at the beginning or at the end of the command line:or
Although sometimes it may be a better idea to actually verify whether the file exists before trying to delete it, like you are doing in your own solution. Note, however, that you don't need to delete the files one by one, using a loop. You can use a single command to delete the lot:
You can redirect stdout to
nul
to hide it.Just add
>nul
to the commands you want to hide the output from.Here you can see all the different ways of redirecting the std streams.
Just add a
>NUL
at the end of the lines producing the messages.For example,
COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat >NUL