rekursiver Vergleich des Directories-Inhalts mit cmd unter Windows XP zur Ausgabedatei

rekursiver Vergleich des Directories-Inhalts mit cmd unter Windows XP zur Ausgabedatei

Ich möchte zwei Verzeichnisse und Unterverzeichnisse rekursiv vergleichen, ohne zusätzliche Installation in Windows XP. Der Ordnerbaum und die Dateinamen sind gleich, aber die Dateiinhalte können unterschiedlich sein. Gibt es eine Möglichkeit, dies zu tun? Danke!

Antwort1

So etwas wie das hier sollte funktionieren, vorausgesetzt, dass Quell- und Zielbaum, wie Sie sagten, identisch sind:

@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%
)

Dadurch wird eine Protokolldatei wie diese erstellt:

c:\stack\rootfolder1\file1.txt und c:\stack\rootfolder2\file1.txt sind unterschiedlich. c:\stack\rootfolder1\sub1\file2.txt und c:\stack\rootfolder2\sub1\file2.txt sind unterschiedlich.

Bearbeiten: Ich habe es hier nicht verwendet, fcda Fehler für Windows XP gemeldet wurden, wenn der Befehl Dateien vergleicht, die sich in jedem 128. Byte einer Zeichenfolge unterscheiden. Mein Hinweis:http://support.microsoft.com/kb/953929/en-us

Aber folgen Sie den Kommentaren von @Synetech für weitere Informationen ;) Danke an ihn!

Antwort2

Danke, GD, ich habe es gefunden: Vergleichsordner - dir1 und dir2 - liegen auf Laufwerk D. Die Datei logfile.txt für vergleichbare Ergebnisse liegt auch auf Laufwerk D. in der Batchdatei:

  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%

Antwort3

Ich habe diesen Batch in reinem DOS geschrieben. Er kann zwei Ordner mit Unterordnern vergleichen und zeigt während des Vergleichs visuelle Meldungen an. Dies ist nützlich für kleine Ordnerstrukturen, sodass Sie die Fehler während des Vergleichs sofort auf dem Konsolenbildschirm sehen können.

Hinweis: Der Vergleich wird angehalten, wenn ein Vergleichsfehler auftritt! Es wird kein Fehlerprotokoll erstellt, es ist jedoch möglich, das Fehlerecho in eine Protokolldatei umzuleiten und den Pausenbefehl abzubrechen.

Für große Ordnerbäume oder -inhalte empfiehlt sich die Verwendung spezieller Tools wie ROBOCOPY oder ähnlicher Tools, die sehr ausführliche Berichte sowohl zum Kopieren als auch zum Vergleichen erstellen.

@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

verwandte Informationen