cmd windows xp でディレクトリの内容を再帰的に比較してファイルを出力します

cmd windows xp でディレクトリの内容を再帰的に比較してファイルを出力します

Windows XP に追加インストールせずに、2 つのディレクトリとサブディレクトリのファイルを再帰的に比較したいと考えています。フォルダとファイル名のツリーは同じですが、ファイルの内容が異なる場合があります。何か方法はありますか? よろしくお願いします!

答え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/ja-jp

詳細については、@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 で作成しました。サブフォルダーを含む 2 つのフォルダーを比較し、比較中に視覚的なメッセージを表示できます。これはフォルダーのツリーが小さい場合に便利で、比較の実行中にコンソール画面でエラーをすぐに確認できます。

注意: 比較エラーが発生すると、比較は一時停止します。エラー ログは生成されませんが、エラー エコーをログ ファイルにリダイレクトして、一時停止コマンドをカットすることは可能です。

大きなフォルダーのツリーやコンテンツの場合は、コピーと比較の両方について非常に詳細なレポートを生成する 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

関連情報