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

관련 정보