sr2013
Goto Top

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:
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
Um sie dann aus dem zentralen Verzeichnis weiterverarbeiten zu können.

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
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

Member: bastla
bastla Jan 29, 2013 updated at 21:20:13 (UTC)
Goto Top
Hallo sr2013 und willkommen im Forum!

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"
Wegen des "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
- auch hier wieder mit "Test-echo" (in Zeile 12) ...

Grüße
bastla
Member: sr2013
sr2013 Jan 30, 2013 updated at 19:14:42 (UTC)
Goto Top
Hallo bastla,

herzlichen Dank für die schnelle Antwort! Hab es eben am heimischen Rechner nachgestellt, da hat es auf Anhieb das gemacht, was es sollte. Auf Arbeit gab es noch einen Fehler, aber dann lag der Fehler wohl beim Anwender face-wink

Danke auch für das aufmerksame Lesen!! Du hattest recht, das /r war nicht ohne Grund gesetzt, weil es noch Unterverzeichnisse gibt. Da habe ich die Aufgabenstellung zu knapp beschrieben. Also habe ich deine Lösung 2 gewählt.

So nun hoffe ich, dass ich bei meiner neuen Tätigkeit schnell dazu lerne und mich hier mal für die Hilfe revanchieren kann face-smile
Ich find es immer wieder toll, wieviel Hilfe man im Netz so findet, von wegen Internet macht einsam...

Viele Grüße
Member: bastla
bastla Jan 30, 2013 at 19:50:48 (UTC)
Goto Top
Hallo sr2013!

Freut mich, wenn's hilft - und Deine Einstellung, hier auch selbst etwas beitragen zu wollen, freut mich noch mehr. face-smile

Grüße
bastla