1

.batファイルでは、2つのフォルダーを比較し、これらのフォルダー間に違いがある場合は.batファイルを終了する必要があります。

残念ながら、さまざまな比較結果に対して明示的なリターンコードを提供compwindiffないでください。上記のロジックの結果を処理しcompたり、実装したりする別の方法はありますか?windiff

4

2 に答える 2

2

compファイル(セット)が異なる場合、エラーレベルを1に設定します。if errorlevelhelp if詳細を読むために)でテストするか、
cmd && cmd_to_execute_if_successful
cmd || cmd_to_execute_if_unsuccessfulcomp folderA folderB || exit /bあなたの場合)を使用することができます

于 2012-09-05T17:48:56.353 に答える
1

実際には両方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。同じではありません。

于 2012-09-05T21:36:50.960 に答える