Windows Batch Gleichzeitiges Kopieren und Umbenennen von Dateien in for Schleife
Hallo,
nachdem ich erfolglos gegoogelt und nicht wirklich etwas gefunden habe, hier meine Frage:
Meine Verzeichnisstruktur sieht beispielhaft folgendermaßen aus:
Die Datenen log.log möchte ich in ein Verzeichnis
C:\daten_neu kopieren und dabei umbenennen, so dass
Um sie dann aus dem zentralen Verzeichnis weiterverarbeiten zu können.
Nun meine Frage: wie mache ich das?
Das einfache Kopieren ginge mit
Dabei wird aber die Ziel-Datei jeweils überschrieben und es bleibt nur die letzte stehen.
Es müsste doch möglich sein, den Teil 20120103 aus %%f herauszufiltern und dynamisch in den Ziel-Dateinamen zu integrieren. Das ist mir aber nicht gelungen.
Vielleicht gibt es ja hier jemanden, der das aus dem ff kann, ich - Neuling in der Batch-Programmierung - bin für jeden Hinweis dankbar.
Viele Grüße
nachdem ich erfolglos gegoogelt und nicht wirklich etwas gefunden habe, hier meine Frage:
Meine Verzeichnisstruktur sieht beispielhaft folgendermaßen aus:
C:\daten\20120101\log.log
C:\daten\20120102\log.log
C:\daten\20120103\log.log
C:\daten\20120104\log.log
usw.
Die Datenen log.log möchte ich in ein Verzeichnis
C:\daten_neu kopieren und dabei umbenennen, so dass
C:\daten\20120101\log.log -> C:\daten_neu\20120101log.log
C:\daten\20120102\log.log -> C:\daten_neu\20120102log.log
C:\daten\20120103\log.log -> C:\daten_neu\20120103log.log
C:\daten\20120104\log.log -> C:\daten_neu\20120104log.log
Nun meine Frage: wie mache ich das?
Das einfache Kopieren ginge mit
for /r C:\daten %%f in (log.log) do copy "%%f" C:\daten_neu
Dabei wird aber die Ziel-Datei jeweils überschrieben und es bleibt nur die letzte stehen.
Es müsste doch möglich sein, den Teil 20120103 aus %%f herauszufiltern und dynamisch in den Ziel-Dateinamen zu integrieren. Das ist mir aber nicht gelungen.
Vielleicht gibt es ja hier jemanden, der das aus dem ff kann, ich - Neuling in der Batch-Programmierung - bin für jeden Hinweis dankbar.
Viele Grüße
Please also mark the comments that contributed to the solution of the article
Kommentar vom Moderator Biber am Jan 30, 2013 um 21:32:43 Uhr
Verschoben von "Tools & Utilties" nach "Batch & Shell". Und auf "Erledigt" gesetzt.
Content-Key: 197881
Url: https://administrator.de/contentid/197881
Printed on: April 19, 2024 at 04:04 o'clock
3 Comments
Latest comment
Hallo sr2013 und willkommen im Forum!
Wenn die Quellordner offensichtlich alle direkt in "C:\daten" liegen und "2012*" heißen, etwa so:
Wegen des "
Sollte allerdings Dein "
- auch hier wieder mit "Test-
Grüße
bastla
Wenn die Quellordner offensichtlich alle direkt in "C:\daten" liegen und "2012*" heißen, etwa so:
for /d %%i in (C:\daten\2012*) do echo copy "%%i\log.log" "C:\daten_neu\%%~nilog.log"
echo
" werden (zum Testen) die Kopierbefehle nur angezeigt, aber nicht ausgeführt ...Sollte allerdings Dein "
for /r
" ernst gemeint sein (weil es auch in Unterordnern von zB "C:\daten\20120101" noch "log.log"-Dateien gibt), besser:@echo off & setlocal
set "Basis=C:\daten"
set "Datei=log.log"
set "Ziel=C:\daten_neu"
for /f "delims=" %%i in ('dir /s/b/a-d "%Basis%\%Datei%"') do call :ProcessFile "%%i"
goto :eof
:ProcessFile
set "Pfad=%~f1"
call set "RelPfad=%%Pfad:%Basis%=%%"
echo copy %1 "%Ziel%\%RelPfad:\=%"
goto :eof
echo
" (in Zeile 12) ...Grüße
bastla