透過cmd windows xp遞歸比較directoreis內容到輸出文件

透過cmd windows xp遞歸比較directoreis內容到輸出文件

我希望遞歸地比較兩個目錄和子目錄文件,而不需要在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磁碟機上。

  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 下編寫了這個批次。它可以比較兩個資料夾及其子資料夾,並在比較過程中顯示視覺訊息。它對於小型資料夾樹很有用,因此您可以在執行比較時立即在控制台螢幕中看到錯誤。

注意:如果出現比較錯誤,比較將暫停!它不會產生錯誤日誌,但是可以將錯誤回顯重定向到日誌檔案並剪切暫停命令。

對於大型資料夾的樹或內容,最好使用特定工具,例如 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

相關內容