dixioldie
Goto Top

Kopieren von Dateien im Datumsbereich mit Verzeichnis-Struktur?

Um Dateien zu sichern, suche ich nach einem Weg, veränderte Dateien in einem bestimmten Datumsbereich (z.B. 1.1.2011 bis 31.12.2011) zu finden und inklusive(!) der Verzeichnis-Struktur zu kopieren.
Mit xcopy war ich nicht erfolgreich, da nur Dateien ab einem bestimmten Datum kopiert werden.
Mit der Suche im Windows-Explorer von Win7 war ich nicht erfolgreich, da keine Verzeichnis-Struktur kopiert wird.

Kennt jemand einen allgemein gültigen Weg, um das Problem zu lösen?

Content-Key: 196563

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

Printed on: April 26, 2024 at 14:04 o'clock

Member: bastla
bastla Jan 07, 2013 updated at 15:19:06 (UTC)
Goto Top
Hallo Dixioldie und willkommen im Forum!

Mit einem Batch (und nicht allzu großer Eile face-wink - mit zB XXCOPY wäre das etwas flotter zu bewerkstelligen) ließe sich das etwa so umsetzen:
@echo off & setlocal
set "Quelle=D:\Test"  
set "Ziel=X:\Kopie"  
set "Von=20110101"  
set "Bis=20111231"  

for /f "delims=" %%i in ('dir /s/b/a-d "%Quelle%"') do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do if "%%c%%b%%a" geq "%Von%" if "%%c%%b%%a" leq "%Bis%" call :ProcessFile "%%i"  
goto :eof

:ProcessFile
set "Q=%~1"  
call set "Z=%%Q:%Quelle%=%Ziel%%%*"  
echo %1 --^> "%Z%"  
xcopy /dy %1 "%Z%">nul  
goto :eof
Die Schalter "/dy" (weitere nach Bedarf hinzufügen) sorgen dafür, dass der Batch auch mehrfach ausgeführt werden kann, da nur neuere Dateien kopiert würden. Mit "*" am Ende des Zieldateinamens wird signalisiert, dass eine Datei und nicht ein Verzeichnis erstellt werden soll - so lässt sich die Abfrage
Ist das Ziel X:\Kopie\Test1.txt ein Dateiname
oder ein Verzeichnisname
(D = Datei, V = Verzeichnis)?
vermeiden.

Grüße
bastla
Member: Dixioldie
Dixioldie Jan 08, 2013 at 09:41:38 (UTC)
Goto Top
Ich habe die Parameter von xcopy ergänzt:
@echo on & setlocal
set "Quelle=Y:\Files"
set "Ziel=E:\Temp\Test"
set "Von=20110101"
set "Bis=20111231"
for /f "delims=" %%i in ('dir /s/b/a-d "%Quelle%"') do for /f "tokens=1-3 delims=. " %%a in ("%%~ti") do if "%%c%%b%%a" geq "%Von%" if "%%c%%b%%a" leq "%Bis%" call :ProcessFile "%%i"
goto :eof
:ProcessFile
set "Q=%~1"
call set "Z=%%Q:%Quelle%=%Ziel%%%*"
echo %1 --^> "%Z%"
xcopy /d /y /s %1 "%Z%">nul
goto :eof

Jetzt erzeugt das Script Verzeichnisse - und löscht sie dann gleich wieder?
Warum?



:ProcessFile
set "Q=%~1"
call set "Z=%%Q:%Quelle%=%Ziel%%%*"
echo %1 --^> "%Z%"
xcopy /dy %1 "%Z%">nul
goto :eof

Die Schalter "/dy" (weitere nach Bedarf hinzufügen) sorgen dafür, dass der Batch auch mehrfach
ausgeführt werden kann, da nur neuere Dateien kopiert würden. Mit "*" am Ende des Zieldateinamens wird
signalisiert, dass eine Datei und nicht ein Verzeichnis erstellt werden soll - so lässt sich die Abfrage
Ist das Ziel X:\Kopie\Test1.txt ein Dateiname
> oder ein Verzeichnisname
> (D = Datei, V = Verzeichnis)?
> 
vermeiden.

Grüße
bastla
Member: bastla
bastla Jan 08, 2013 at 14:46:11 (UTC)
Goto Top
Hallo Dixioldie!

Der Schalter "/s" ist nicht sinnvoll, da Zielpfade ohnehin nach Bedarf automatisch erzeugt werden und jeweils nur eine einzige Datei kopiert wird - ich hatte eher an zB "/hkoqr" gedacht ...

... ansonsten kann ich allerdings das Problem bei meinen Tests nicht nachvollziehen ...

Grüße
bastla

P.S.: Verwende bitte beim Posten von Code die passende Formatierung.