1

在 .bat 文件中,如果这些文件夹之间有任何差异,我需要比较 2 个文件夹并退出 .bat 文件。

不幸的是,comp不要windiff为不同的比较结果提供明确的返回码。有没有其他方法来处理compwindiff实现上述逻辑的结果?

4

2 回答 2

2

comp如果文件(集)不同,则将 errorlevel 设置为 1。您可以使用if errorlevel(help if阅读详细信息) 进行测试,也可以使用
cmd && cmd_to_execute_if_successful
cmd || cmd_to_execute_if_unsuccessful(comp 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)

还要记住不要与 混淆NULNULL它们是不一样的。

于 2012-09-05T21:36:50.960 回答