何世代にもわたってこの質問のバリエーションがありましたが、いくつかの非常に複雑なWindowsスクリプトを書いたにもかかわらず、それらを実際にサイレントにする方法を見つけることができないようです。
以下は、現在のスクリプトの1つからの抜粋です。
@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
この結果は次のとおりです。
C:\Temp> test.bat
1 file(s) copied.
File Not Found
Echo is off.
C:\Temp>
一方、「1個のファイルがコピーされました。」単に迷惑です。「ファイルが見つかりません」は、ユーザーに何かが間違っていると思い込ませます(それはそうではありません-ファイルは問題ありません)。
出力を抑制するには、NUL
へのリダイレクトを使用します。
コンソールコマンドが使用する出力には、次の2種類があります。
標準出力、またはstdout
、
標準エラー、またはstderr
。
この2つのうち、stdout
は、copy
などの内部コマンドとコンソールユーティリティ、またはfind
などのexternalコマンドの両方でより頻繁に使用されます。 、およびサードパーティのコンソールプログラムによる。
_>NUL
_は標準出力を抑制し、正常に動作します。 copy
コマンドの1 file(s) copied.
メッセージを抑制するため。別の構文は_1>NUL
_です。そう、
_COPY file1file2>NUL
_
または
_COPY file1file21>NUL
_
または
_>NUL COPY file1file2
_
または
_1>NUL COPY file1file2
_
COPY
のすべての標準出力を抑制します。
通常stderr
に出力されるエラーメッセージを抑制するには、代わりに_2>NUL
_を使用します。そのため、指定されたファイルが見つからないときにDEL
が出力する_File Not Found
_メッセージを抑制するには、コマンドラインの先頭または末尾に_2>NUL
_を追加するだけです。
_DEL file2>NUL
_
または
_2>NUL DEL file
_
独自のソリューションで行っているように、削除しようとする前にファイルが存在するかどうかを実際に確認する方が良い場合もあります。ただし、ループを使用してファイルを1つずつ削除する必要はありません。 1つのコマンドを使用して、ロットを削除できます。
_IF EXIST "%scriptDirectory%*.noext" DEL "%scriptDirectory%*.noext"
_
(例のように)バッチスクリプトの通常の出力をすべてサイレントにしたい場合は、リダイレクトを使用してバッチファイルを実行するのが最も簡単な方法です。
C:\Temp> test.bat >nul
この方法では、スクリプトの1行を変更する必要はなく、画面にエラーメッセージが表示されます。 allエラーメッセージを含む出力を抑制するには:
C:\Temp> test.bat >nul 2>&1
画面に表示したい出力を生成する行がスクリプトにある場合、おそらく、沈黙させたいすべての行の代わりにthose lineasにリダイレクトを追加する方が簡単です:
@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
REM Next line DO appear in the screen
ECHO Script completed >con
アントニオ
メッセージを生成する行の最後に>NUL
を追加するだけです。
例えば、
COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat >NUL
Stdoutをnul
にリダイレクトして非表示にすることができます。
COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat >nul
出力を非表示にするコマンドに>nul
を追加するだけです。
ここ stdストリームをリダイレクトするさまざまな方法をすべて見ることができます。
htmlおよびそのすべてのコンテンツという名前のディレクトリをサイレントモードで宛先ディレクトリにコピーします。宛先ディレクトリが存在しない場合でも、作成されます。
@echo off
TITLE Copy Folder with Contents
set SOURCE=C:\labs
set DESTINATION=C:\Users\MyUser\Desktop\html
xcopy %SOURCE%\html\* %DESTINATION%\* /s /e /i /Y >NUL
/ S空のものを除くディレクトリとサブディレクトリをコピーします。
/ E空のものも含めて、ディレクトリとサブディレクトリをコピーします。/S/Eと同じです。/Tを変更するために使用できます。
/ I宛先が存在せず、複数のファイルをコピーする場合、宛先はディレクトリである必要があると想定します。