比较两个文件夹及其子文件夹batch file

我有两个文件夹包含所有相同的文件和子文件夹,但每个文件内的文字可能已经改变。 我想写一个batch file,将search每个文件,并寻找任何差异。 什么是我想要做的最好的工具?

Solutions Collecting From Web of "比较两个文件夹及其子文件夹batch file"

不需要批处理文件。 一个FC命令可以做你想做的事情:

fc folder1\* folder2\* 

如果需要,您可以更具体地为第一个文件夹中的文件掩码。 例如folder1\*.txt

该命令将报告文件夹1中存在但文件夹2中丢失的文件。 folder2中的额外文件将被忽略。

FC命令有许多选项。 输入HELP FCFC /? 从命令提示符处获得更多信息。

编辑

扩展解决方案以支持子文件夹有点棘手。 使用FOR / R迭代给定根的文件夹层次结构是很容易的。 问题是获取相对路径,以便层次结构可以应用到另一个根。

最简单的解决方案是使用FORFILES,因为它直接支持相对路径。 但FORFILES是…慢:/

在这一点上,一个批处理文件是有道理的:

 @echo off setlocal set "folder1=c:\path\To\Folder1\Root" set "folder2=d:\path\To\Folder2\Root" set "fileMask=*" for /f "delims=" %%F in ( 'echo "."^&forfiles /s /p "%folder1%" /m "%fileMask%" /c "cmd /c if @isdir==TRUE echo @relpath"' ) do fc "%folder1%\%%~F\%fileMask%" "%folder2%\%%~F\*" 

我有更好的运气与以下批处理文件。 路径名称必须完全匹配; 所以只有驱动器号不同。

映射共享网络文件夹可能会使这更容易。 我不能肯定你的情况。

'— setlocal set“folder1 = D:\ User \ Public”set“Drv2 = E:”set“fileMask = *”

 setlocal set "folder1=<DrvLttr>:\<Folder>\<SubFolder>" set "Drv2=<DrvLttr2>:" set "LogFile=<SystemDrv>\User\<UserName>\<LogFileName>" ECHO "the '>' may OVER WRITE or make a ~NEW~ File for the results" > "%LogFile%" ECHO " '>>' adds to the end of the file >> "%LogFile%" FOR /R %folder1% %%A in ( *.* ) DO FC "%%A" "%Drv2%%%~pnxA" 1>> "%LogFile%" 2>&1 

如果你想注意什么是测试命令,你可以尝试在DO之后插入ECHO。 您可以删除1 >> …东西,以在屏幕上查看结果,而不必打开输出文件。