.batファイルでは、2つのフォルダーを比較し、これらのフォルダー間に違いがある場合は.batファイルを終了する必要があります。
残念ながら、さまざまな比較結果に対して明示的なリターンコードを提供comp
しwindiff
ないでください。上記のロジックの結果を処理しcomp
たり、実装したりする別の方法はありますか?windiff
.batファイルでは、2つのフォルダーを比較し、これらのフォルダー間に違いがある場合は.batファイルを終了する必要があります。
残念ながら、さまざまな比較結果に対して明示的なリターンコードを提供comp
しwindiff
ないでください。上記のロジックの結果を処理しcomp
たり、実装したりする別の方法はありますか?windiff
comp
ファイル(セット)が異なる場合、エラーレベルを1に設定します。if errorlevel
(help if
詳細を読むために)でテストするか、
cmd && cmd_to_execute_if_successful
cmd || cmd_to_execute_if_unsuccessful
(comp folderA folderB || exit /b
あなたの場合)を使用することができます
実際には両方comp
ともfc
エラーレベルを返しますが、どちらも少しうるさいです。したがって、出力をにパイプするのが最善nul
です。
:: Comp asks a Y/N question via `stderr` (stream2)
:: Comp prints the differences between files on `stdout` (stream1)
:: So we answer the question, and divert both streams to `nul`
echo n | comp dir1 dir2 > nul 2>&1
if %errorlevel%==0 (
echo The directories are the same.
) else (
echo The directories are different.
)
:: FC simply outputs the differences between the files via `stdout`
:: So it's only nessicary to redirect `stdout` (stream1) to nul
fc dir1\* dir2\* > nul
if %errorlevel%==0 (
echo The directories are the same.
) else (
echo The directories are different.
)
または、wmzが指摘したように...
echo n | comp dir1 dir2 > nul 2>&1 && cmd_to_execute_if_successful
と
fc dir1\* dir2\* > nul || cmd_to_execute_if_unsuccessful
とはいえ、私見では、コーディングはとてもうるさいので、少し読みにくいです。
注: FC
バイナリ比較を行いますが、通常は問題ありませんが、/L
スイッチを追加することでASCIIテキストを指定できます。(fc /l dir1\*.txt dir2\*.txt
)
また、と混同NUL
しないでくださいNULL
。同じではありません。