在 .bat 文件中,如果这些文件夹之间有任何差异,我需要比较 2 个文件夹并退出 .bat 文件。
不幸的是,comp
不要windiff
为不同的比较结果提供明确的返回码。有没有其他方法来处理comp
或windiff
实现上述逻辑的结果?
在 .bat 文件中,如果这些文件夹之间有任何差异,我需要比较 2 个文件夹并退出 .bat 文件。
不幸的是,comp
不要windiff
为不同的比较结果提供明确的返回码。有没有其他方法来处理comp
或windiff
实现上述逻辑的结果?
comp
如果文件(集)不同,则将 errorlevel 设置为 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
它们是不一样的。