recursivo compara o conteúdo do directoreis pelo cmd windows xp para o arquivo de saída

4

Eu desejo comparar dois arquivos de diretórios e subdiretórios de forma recursiva, sem instalação adicional no windows xp. a árvore do nome das pastas e arquivos é a mesma, mas o conteúdo dos arquivos pode ser diferente. Existe alguma maneira de fazer isso? Obrigado!

    
por mich 22.12.2013 / 15:19

3 respostas

0

Obrigado ao G-D, eu encontrei:  Pastas comparativas - dir1 e dir2 estão na unidade D. O arquivo logfile.txt para resultados comparáveis também está na unidade D. no arquivo em lotes:

  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%
    
por 23.12.2013 / 09:51
1

Algo assim deve fazer o truque, assumindo, como você disse, que a árvore de origem e de destino são as mesmas:

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

Isto irá renderizar um arquivo de log como este:

c:\stack\rootfolder1\file1.txt and c:\stack\rootfolder2\file1.txt are different c:\stack\rootfolder1\sub1\file2.txt and c:\stack\rootfolder2\sub1\file2.txt are different

Editar: eu não usei fc aqui porque os erros foram reportados para o Windows XP quando o comando compara arquivos que diferem a cada 128º byte de uma cadeia de caracteres. Minha referência: link

Mas siga os comentários do @Synetech para mais informações;) graças a ele!

    
por 22.12.2013 / 18:42
0

Eu escrevi este lote no DOS puro. Pode comparar duas pastas com subpastas e exibe mensagens visuais durante a comparação. É útil para pequenas árvores de pastas, para que você possa ver imediatamente os erros na tela do console enquanto a comparação é realizada.

Nota: A comparação será pausada se ocorrer um erro de comparação! Ele não produz um log de erros, no entanto, é possível redirecionar o erro Echo para um arquivo de log e cortar o comando Pause.

Para árvores ou conteúdo de pastas grandes, é melhor usar ferramentas específicas, como ROBOCOPY ou semelhantes, que produzem relatórios muito detalhados, tanto para cópia quanto para comparação.

@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
    
por 01.04.2017 / 16:13