protecdok
Goto Top

Bedingtes Kopieren mithilfe von Batch und Robocopy

Hallo liebe Community,

ich bin an euren Rat angewiesen. Ich habe für eine Sicherung ein Robocopy Script erstellt. Das funktioniert soweit. Nun wollte ich eine Optimierung vornehmen. Wenn ich per VPN die Sicherung durchführe, wird sehr viel „unnötiges“ überprüft, sodass die Sicherung sehr viel Zeit in Anspruch nimmt. Dabei bin ich auf die Idee gekommen, nur die aktuellen Ordner zu kopieren.
@echo off

set year=%date:~6%

FOR /f "tokens=1 delims=." %%F IN ('dir /AD /B Y:\Daten') DO (  

IF "%%F" == "%year%" (  

robocopy.exe "Y:\Daten\ <ORDNERNAME>" "C:\Daten\ <ORDNERNAME>" " /E /Z /COPY:DAT /XO /XC /XN /FFT /R:0 /W:0 /ETA /LOG+:"%HOMEPATH%\Sicherungslogdatei.log" /v /TEE  

)

)

Meine Ordnerstruktur ist folgendermaßen aufgebaut:
<Laufwerksbuchstabe>\Daten\ <Jahr.Monat.Tag>
<Jahr.Monat.Tag>

Die Optimierung sollte dazu führen, dass das Jahr aus dem Ordnernamen mit dem heutigen Jahr verglichen wird. Wenn das der Fall ist, soll der Ordner kopiert werden. Um das zu realisieren muss ich die Pfade im Robocopy dynamisch an das derzeitige Ergebnis der For-Schleife gestalten. Das Problem ist, dass die Laufzeitvariable nur das Jahr des Ordnernamens beinhaltet und nicht den kompletten Ordnernamen. Hätte jemand einen Tipp wie ich das realisieren könnte? Für jeden Hinweis wäre ich dankbar.

Gruß Protecdok

Content-Key: 212724

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

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

Member: Endoro
Endoro Jul 28, 2013 at 18:37:05 (UTC)
Goto Top
Hallo Protecdok,

du könntest eine Forschleife davorspannen:
@ECHO OFF &SETLOCAL
set "year=%date:~6%"  

FOR /d %%a IN (Y:\Daten\*) DO (
	FOR /f "delims=." %%F IN ("%%~a") DO (  
		IF "%%F" == "%year%" (  
			robocopy.exe "Y:\Daten\%%~a" "C:\Daten\%%~a" " /E /Z /COPY:DAT /XO /XC /XN /FFT /R:0 /W:0 /ETA /LOG+:"%HOMEPATH%\Sicherungslogdatei.log" /v /TEE  
		)
	)
)
oder gleich alle Tokens deiner Forschleife einsammeln:
@ECHO OFF &SETLOCAL
set "year=%date:~6%"  

FOR /f "tokens=1-3 delims=." %%F IN ('dir /AD /B Y:\Daten') DO (  
	IF "%%F" == "%year%" (  
		robocopy.exe "Y:\Daten\%%F.%%G.%%H" "C:\Daten\%%F.%%G.%%H" " /E /Z /COPY:DAT /XO /XC /XN /FFT /R:0 /W:0 /ETA /LOG+:"%HOMEPATH%\Sicherungslogdatei.log" /v /TEE  
	)
)
lg.
Member: Protecdok
Protecdok Jul 28, 2013 at 19:37:41 (UTC)
Goto Top
Batch ist schon was spezielles...
Funktioniert aber einwandfrei! Vielen Dank face-smile

LG