ghrudius
Goto Top

Per Batch Verzeichnis A mit B vergleichen und Unterschiede in C kopieren

Hallo,
ich versuche grade verzeifelt, per Batch ein Problem von mir zu lösen und automatisieren, ohne zusätzliche Software nutzen zu müssen.

Ich habe zwei Verzeichnisse, A ist das Soll Verzeichnis, B das Ist-Verzeichnis.

Alle Dateien aus A, welche in B fehlen oder sich von der Version in B unterscheiden, benötige ich in einem dritten Verzeichnis C.

Mein aktueller Lösungsansatz beinhaltet 2 Schritte:
Ich kopiere alles von A nach C, und lösche dann alles was identisch in B ist raus.

Dazu habe ich folgendes Script mit Hilfe von Google zusammengebastelt:
robocopy C:\TEST\A C:\TEST\C /E 

for /R C:\TEST\B\ %%I in (*.*) do (
for /R C:\TEST\C\ %%J in (*.*) do (
IF .%%~nI%%~xI.==.%%~nJ%%~xJ. (DEL "%%J")))  

Bei diesem Script werden mir aber alle Dateien welche in B und C den gleichen Namen haben gelöscht. Ich bekomme es nicht hin, dass auch eine Änderung des Inhalts geprüft wird, hab schon mit fc getestet, aber keinen funktionierenden Code hinbekommen.

Bin neu hier, und auch relativ neu in der Batch-Programmierung, hoffe es kann mir jemand bei meinem Problem helfen, oder vielleicht einen anderen Lösungsansatz bieten.

Vielen Dank

Content-Key: 379134

Url: https://administrator.de/contentid/379134

Printed on: April 19, 2024 at 23:04 o'clock

Member: Kraemer
Kraemer Jul 04, 2018 at 10:09:30 (UTC)
Goto Top
Mitglied: 136588
136588 Jul 04, 2018 updated at 13:49:33 (UTC)
Goto Top
Hier mit Powershell:
$folderA = 'D:\FolderA'  
$folderB = 'D:\FolderB'  
$folderC = 'D:\FolderC'  
compare (gci $folderA -File | Get-FileHash -Algorithm SHA256) (gci $folderB -File | Get-FileHash -Algorithm SHA256) -Property Hash -PassThru | ?{$_.SideIndicator -eq '<='} | copy-item -Destination $folderC -Force  
Member: Ghrudius
Ghrudius Jul 05, 2018 at 14:25:06 (UTC)
Goto Top
Vielen Dank.

Ein Kollege hat es aber komplett mit Robocopy gelöst.

Er kopiert alles von A nach C, und verschiebt dann alle identischen Dateien von C nach B.

@echo off
REM --- Variablen setzen

REM -------------------------------------
REM -Verzeichnis Ursprung-
REM -------------------------------------
set source=C:\TEST\A     


REM ------------------------------------
REM -Verzeichnis mit welchem Verglichen werden soll-
REM ------------------------------------
set dest=C:\TEST\B\


REM --------------------------------------------------------------------------
REM -Verzeichnis in dem die geänderten oder neuen Dateien gespeichert werden -
REM --------------------------------------------------------------------------
set diff=C:\TEST\C\


REM --------------------------------------------------------------
REM - folgende Verzeichnisse aus A auslassen (mit Leerzeichen trennen) -
REM --------------------------------------------------------------
Set "exclu=Verz1 Verz2"  


REM ----------------------------------------------------------------------
REM ----  alle Dateien A ins "NEUE" Verzeichnis spielen ----  
REM ----------------------------------------------------------------------

robocopy %source% %diff% /s /xd %exclu% 


REM ---------------------------------------------------------------------------------------------------
REM ----  alle Dateien aus A verschieben in B,  aber nur die, die gleich sind ----
REM ---------------------------------------------------------------------------------------------------

robocopy %diff% %dest% /E /MOVE /IS /XL /XN /XC