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를 로그 파일로 리디렉션하고 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