通过 cmd windows xp 递归比较目录内容到输出文件

通过 cmd windows xp 递归比较目录内容到输出文件

我希望以递归方式比较两个目录和子目录文件,而无需在 Windows XP 中进行额外安装。文件夹和文件名称的树相同,但文件的内容可能不同。有什么办法吗?谢谢!

答案1

像这样的事情应该可以解决问题,假设正如你所说,源树和目标树是相同的:

@ECHO OFF
set myrootfolder1=c:\stack\rootfolder1
set myrootfolder2=c:\stack\rootfolder2
set logfile=c:\stack\compare.log

type NUL > %logfile%

setlocal ENABLEDELAYEDEXPANSION

FOR /R %myrootfolder1% %%G IN (*.*) DO (
    set sourcefile=%%G
    set targetfile=!sourcefile:%myrootfolder1%=%myrootfolder2%!
    echo N | comp /A !sourcefile! !targetfile! | find "OK" > nul
    IF ERRORLEVEL 1 echo !sourcefile! and !targetfile! are different >>%logfile%
)

这将呈现如下日志文件:

c:\stack\rootfolder1\file1.txt 和 c:\stack\rootfolder2\file1.txt 不同 c:\stack\rootfolder1\sub1\file2.txt 和 c:\stack\rootfolder2\sub1\file2.txt 不同

编辑:我在这里没有使用,fc因为当命令比较字符串中每 128 个字节不同的文件时,Windows XP 已报告错误。我的参考:http://support.microsoft.com/kb/953929/en-us

但请关注@Synetech 评论以获取更多信息;)感谢他!

答案2

感谢 GD,我找到了:比较文件夹 - dir1 和 dir2 位于驱动器 D 上。用于比较结果的文件 logfile.txt 也在驱动器 D 中。在批处理文件中:

  D:
setlocal enableextensions 
setlocal ENABLEDELAYED EXPANSION 
SETLOCAL ENABLEDELAYEDEXPANSION
set filename=logfile.txt
echo. 2>%filename%
cd dir1
(for /r %%i in (*) do set p=%%i&if exist "D:\dir2\!p:~8!" (FC "%%i" "D:\dir2\!p:~8!" | FIND "FC: no dif" > nul&IF ERRORLEVEL 1 (echo !!! file %%i is different >> d:\%filename%)) else (echo !!! file"D:\dir2\!p:~8!" not found >> d:\%filename%))>nul
cd ..\dir2
(for /r %%i in (*) do set p=%%i&if not exist "D:\dir1\!p:~8!"   (echo !!! file "D:\dir1\!p:~8!"  not found >> d:\%filename%))>nul
cd ..
start %filename%

答案3

我使用纯 DOS 编写了此批处理程序。它可以比较两个文件夹及其子文件夹,并在比较过程中显示可视消息。它对于小型文件夹树非常有用,因此您可以在执行比较时立即在控制台屏幕上看到错误。

注意:如果发生比较错误,比较将暂停!它不会生成错误日志,但可以将错误 Echo 重定向到日志文件并切断暂停命令。

对于大型文件夹的树或内容,最好使用 ROBOCOPY 或类似的特定工具来生成非常详细的报告,以供复制和比较。

@Echo OFF
echo.
echo  Compares Files in two or more Folders or Paths
echo ================================================
echo.

set /P Src= Digit or Paste HERE Path n.1 : 
::set Src=YourPath
echo.
set /P Dst= Digit or Paste HERE Path n.2 : 
::set Dst=YourPath
echo.
PAUSE
echo.

SETLOCAL EnableDelayedExpansion

FOR /R "%Src%" %%A IN (*.*) DO (
  set SFold="%%A"
  set TFold=!SFold:%Src%=%Dst%!
  set P1="%%~dpA"

  if "!P2!" EQU "" set P2=!P1!
  if "!P1!" NEQ "!P2!" echo ----------------------------------------------------- Compare Folder is Changed & echo.
  FC !SFold! !TFold!
  if !ERRORLEVEL! NEQ 0 echo. - ERROR - ==================================================================== & PAUSE
  set P2=!P1!
)
echo.
echo ====================================
echo      COMPARE TERMINATED . . . .
echo ====================================
echo.
PAUSE

相关内容