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

Ausgedruckt am: 29.03.2024 um 07:03 Uhr

Mitglied: bastla
Lösung bastla 15.02.2014 aktualisiert um 20:10:03 Uhr
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
Mitglied: Franc79
Franc79 15.02.2014 um 20:05:16 Uhr
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!