我需要比较两个包含大量文件的目录(例如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
会产生相同的结果。我不知道为什么会这样 - 目录应该完全相同 - 并且想知道是否有解决方法。
答案 0 :(得分:0)
正如您所注意到的,fc
和comp
在没有名称的文件名(“以点开头”)和通配符用法方面存在问题。如果您不使用通配符,则没有问题。这可以通过简单的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
丢弃