Я хочу сравнить два файла каталогов и подкаталогов рекурсивно, без дополнительной установки в 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
здесь, потому что были зарегистрированы ошибки для Windows XP, когда команда сравнивает файлы, которые отличаются каждым 128-м байтом строки символов. Моя ссылка: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 ошибки в файл журнала и отключить команду Pause.
Для больших деревьев папок или их содержимого лучше использовать специальные инструменты, такие как 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