Batファイルのエコーをオフにしました。
@echo off
それから私はこのようなことをします
...
echo %INSTALL_PATH%
if exist %INSTALL_PATH%(
echo 222
...
)
そして私は得る:
システムは指定されたパスを見つけることができません。
これら2つのエコー間のメッセージ。
このメッセージの理由は何ですか?また、メッセージがエコーオフを無視する理由は何ですか?
Mike Nakis が言ったように、echo off
は結果の出力ではなく、コマンドの出力のみを防ぎます。コマンドの結果を非表示にするには、行末に>nul
を追加し、エラーを非表示にするには2>nul
を追加します。例えば:
Del /Q *.tmp >nul 2>nul
Krister Andersson のように、エラーが発生する理由は、変数がスペースで展開されているためです:
set INSTALL_PATH=C:\My App\Installer
if exist %INSTALL_PATH% (
になる:
if exist C:\My App\Installer (
つまり:
「C:\ My」が存在する場合、コマンドライン引数として「(」を指定して「App\Installer」を実行します。
「App」という名前のフォルダーがないため、エラーが表示されます。この分割を防ぐために、パスを引用符で囲みます。
これを* .batファイルとして保存し、違いを確認します
:: print echo command and its output
echo 1
:: does not print echo command just its output
@echo 2
:: print dir command but not its output
dir > null
:: does not print dir command nor its output
@dir c:\ > null
:: does not print echo (and all other commands) but print its output
@echo off
echo 3
@echo on
REM this comment will appear in console if 'echo off' was not set
@set /p pressedKey=Press any key to exit
「エコーオフ」は無視されません。 「エコーオフ」は、コマンドをエコーしたくないことを意味し、コマンドによって生成されたエラーについては何も言いません。
あなたが私たちに示した行は大丈夫に見えるので、問題はおそらくそこにありません。それで、私たちにもっと行を見せてください。また、INSTALL_PATHの正確な値を表示してください。
@echo off
// quote the path or else it won't work if there are spaces in the path
SET INSTALL_PATH="c:\\etc etc\\test";
if exist %INSTALL_PATH% (
//
echo 222;
)
私にとって、この問題はファイルのエンコード形式が間違っていたことが原因でした。別のエディターを使用し、UTF-8-BOM
として保存されたため、最初の行は@echo off
でしたが、その前に隠し文字がありました。
そこで、エンコードをプレーンなANSI
テキストに変更すると、問題はなくなりました。