franc79
Goto Top

Dateien rekursiv kopieren und Datum in Dateiname einfügen

Habe mich gerade hier angemeldet, weil ich glaube, hier Hilfe zu bekommen.
Frage aktualisiert (15.02. 17:30)

Mein Ziel ist es auf Win7:
- alle Dateien einer definierten Quelle, die innerhalb des letzten Tages geändert wurden oder neu sind
- mit Verzeichnisstruktur auf ein Ziel zu kopieren
- und die Dateinamen umzubenennen.

aus D:\Quelle\*.* soll E:\Ziel\20140215-*.* werden (Datum dem eigentlichen Dateinamen vorangestellt)


Mein Ansatz war zuerst, XCOPY und REN zu verknüpfen:

@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime ^|find "."') do set dt=%%a
set YYYY=%dt:~0,4%
set MM=%dt:~4,2%
set DD=%dt:~6,2%
set stamp=%YYYY%-%MM%-%DD%

set source="D:\Quelle\*.*"
set destination="E:\Ziel"
xcopy %source% %destination% /E

Wie übergebe ich aber die gerade kopierten Dateien im Ziel an:
ren %%~dpnxi %stamp%-*.*


Zweiter Ansatz:

for %%i in ("%source%*.*") do for /f "delims=" %%a in ("%%~nxi") do (xcopy "%%i" "%destination%%stamp%-%%a" /E)

Probleme hierbei: ist nicht rekursiv, nimmt also keine Unterverzeichnisse. Außerdem erscheint bei jeder Datei ein Prompt, ob Datei oder Verzeichnis.


Kann mir denn keiner weiterhelfen?


Danke,
Franc

Content-Key: 230047

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

Printed on: April 24, 2024 at 04:04 o'clock

Member: bastla
Solution bastla Feb 15, 2014 updated at 19:10:03 (UTC)
Goto Top
Hallo Franc79 und willkommen im Forum!

Das könnte etwa so gehen:
@echo off & setlocal
set "source=D:\Quelle"  
set "destination=E:\Ziel"  

for /f "delims=" %%a in ('wmic OS Get localdatetime ^|find "."') do set dt=%%a  
set YYYY=%dt:~0,4%
set MM=%dt:~4,2%
set DD=%dt:~6,2%
set stamp=%YYYY%-%MM%-%DD%

for /f "delims=" %%i in ('dir /s/b/a-d "%source%"') do call :ProcessFile "%%i"  
goto :eof

:ProcessFile
set "DestPath=%~dp1"  
call set "DestPath=%%DestPath:*%source%=%destination%%%"  
xcopy /y %1 "%DestPath%%stamp%-%~nx1*">nul && echo %1 || echo Fehler bei %1  
goto :eof
Grüße
bastla
Member: Franc79
Franc79 Feb 15, 2014 at 19:05:16 (UTC)
Goto Top
Danke Bastla!

Auf die Idee mit dem Funktionsaufruf hätte ich auch kommen können.

Die Lösung, sie ich zwischenzeitlich selbst gefunden habe ist etwas länger face-wink

Danke!