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, fc
da 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