2013-02-04 9 views
30

世代別に尋ねられたこの疑問のバリエーションがありますが、非常に複雑なWindowsスクリプトを作成していますが、実際にはそれらを静かにする方法を見つけることはできません。Windowsバッチスクリプトを完全にサイレントにするにはどうすればよいですか?

次は私の現在のスクリプトのいずれかからの抜粋です:

@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 

これの結果は次のとおりです。 "1つのファイル(複数可)をコピー"

C:\Temp> test.bat 
     1 file(s) copied. 
File Not Found 
Echo is off. 

C:\Temp> 

のに対し「File Not Found」は、何かが間違っていると思うようにします(ファイルはありません)。

+1

あなたが与えられたものとは異なる解決策を使用してしまった場合は、独自の回答を追加して受け入れてください。質問自体に解決策を追加しないでください。 –

+0

私は実際にif-conditionをプレフィックスとして使用して、2番目の "File Not Found"出力を削除することができました:IF EXIST "%scriptDirectory%*。noext" FOR/F %% f IN( 'dir/B "%scriptDirectory %*。noext "')DO(...私はIF DO()を使用しようとしていたため、元々は機能しませんでした。 –

+0

私は@ bobstein-visiboneの[かなり厳しい、IMHO]のコメントを反映するようにタイトルを変更しました。 –

答えて

55

NULへのリダイレクトを使用し、出力を抑制します。

  • 標準出力、またはstdout

  • 標準誤差、またはstderr

    は、コンソールコマンドが使用出力の2種類があります。両者の

stdoutは、両方の内部コマンドによって、copyように、コンソールユーティリティ、または外部コマンドによって、findなどのような、ならびにサードパーティコンソールプログラムによって、より頻繁に使用されています。

>NULは、標準出力を抑制しています。 copyコマンドの1 file(s) copied.メッセージを抑制する。別の構文は1>NULです。だから、

COPY file1file2>NUL 

または

COPY file1file21>NUL 

または

>NUL COPY file1file2 

または

1>NUL COPY file1file2 

COPYの標準出力のすべてを抑制します。

通常はに出力されるエラーメッセージを抑制するには、代わりに2>NULを使用します。

DEL file2>NUL 

または

2>NUL DEL file 
:だから、まあ、指定したファイルが見つからない場合、 DELプリントは、まだ始まったばかりで、またはコマンドラインの最後にどちらか 2>NULを追加 File Not Foundメッセージを抑制するために、

あなた自身の解決策でやっているように、削除しようとする前にファイルが存在するかどうかを実際に検証するほうが良い場合もあります。ただし、ループを使用してファイルを1つずつ削除する必要はありません。

IF EXIST "%scriptDirectory%*.noext" DEL "%scriptDirectory%*.noext" 
+0

ありがとう、@ AndriyM - 私の実際のスクリプトは単にファイルを削除するだけではありませんが、質問のために削除しました。 1> NULを使用すると、それでもエラーメッセージが表示されますか?それが改善になるだろう。 –

+1

@MikeSadler:はい、 '1> NUL'は標準出力のみを抑制します。エラー出力は引き続き表示されます。 *すべてのコマンドの出力を抑止する必要がある場合は、 '1> NUL'と' 2> NUL'の両方を使用してください。 –

+0

これは完璧です - 私は、ユーザーがエラーメッセージがあればそれを見ることができてうれしいです。 –

2

stdoutをnulにリダイレクトして非表示にすることができます。

COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat >nul 

出力を非表示にするコマンドに>nulを追加するだけです。

Here標準ストリームをリダイレクトするさまざまな方法がすべて表示されます。

3

メッセージを生成する行末に>NULを追加するだけです。例えば

COPY %scriptDirectory%test.bat %scriptDirectory%test2.bat >NUL

8

あなたのバッチスクリプトのすべての通常の出力は、(あなたの例のように)サイレントであることをしたい場合は、それを行うための最も簡単な方法は、バッチファイルを実行することです:あなたは多くを削除するには、単一のコマンドを使用することができます

C:\Temp> test.bat >nul 

この方法では、スクリプト内の1行を変更する必要はなく、画面にエラーメッセージが表示されます。エラーメッセージを含むすべて出力、SUPRESSするには、次のスクリプトを使用すると、画面に表示する出力を生成するラインを持っている場合は

C:\Temp> test.bat >nul 2>&1 

することは、おそらくにそれらの 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 

アントニオ

1

コピー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 

  1. /Sコピーのディレクトリとサブディレクトリ。

  2. /Eディレクトリおよびサブディレクトリをコピーします(空のファイルは です)。/S/Eと同じです。/Tを変更するために使用することができます。

  3. /I宛先が存在せず、複数の ファイルをコピーしている場合、その宛先はディレクトリでなければならないと仮定します。

  4. /Y と、既存の宛先ファイル を上書きすることを確認するメッセージを表示しないようにします。
関連する問題