在Win 7

时间:2017-11-04 07:55:54

标签: batch-file

我需要比较两个包含大量文件的目录(例如comp d1\*.* d2\*.*)。单独比较文件的for循环太慢了。我只关心所有文件是否存在且相同;换句话说,我只关心comp.exe返回代码。

但是,如果存在以句点开头的文件,则会出现意外错误。例如,如果我执行以下操作:

md d1
echo x >d1\.file
md d2
echo x >d2\.file
comp d1\*.* d2\*.*

它产生:

d1\.file      d2\*.*
Could not expand second file name so as to match first

comp替换fc会产生相同的结果。我不知道为什么会这样 - 目录应该完全相同 - 并且想知道是否有解决方法。

1 个答案:

答案 0 :(得分:0)

正如您所注意到的,fccomp在没有名称的文件名(“以点开头”)通配符用法方面存在问题。如果您不使用通配符,则没有问题。这可以通过简单的for循环完成:

@echo off 
setlocal
for %%a in (d1\*) do (
  fc "d1\%%~nxa" "d2\%%~nxa" >nul 2>&1
  if errorlevel 1 set /a fail+=1
)
echo Failed: %fail%
if %fail% == 0 echo all ok. 

(我推荐fc,因为它不要求更多文件进行比较;所有输出都被>nul 2>&1丢弃