ricktonalis
Goto Top

Dateien mit Datum versehen und xcopy

Hallo liebe Forumsgemeinde

Ich möchte gern alle Bilder aus einem Ordner in einen anderen Ordner mitsamt der Ordnerstruktur kopieren. Dabei sollen die Bilder zusätzlich zu ihrem eigentlichen Namen mit einem Datum benannt werden.
xcopy übernimmt das kopieren recht unkompliziert.

xcopy C:\Quelle\*.jpg C:\Ziel\*.jpg /E /Y

Wenn ich jedoch die Dateien mit dem Datum versehen will:

xcopy C:\Quelle\*.jpg C:\Ziel\%date:~-10,2%_%date:~-7,2%_%date:~-4%*.jpg /E /Y

erhalte ich immer folgende Fehlermeldung:

"Zweiter Dateiname konnte nicht so erweitert werden, dass er zum ersten passt."

xcopy fügt das Datum dem Dateinamen nicht hinzu, sonder überschreibt den alten.
gibt es hierfür eventuell eine Lösung?
Über Antworten würde ich mich sehr freuen.

Content-Key: 168584

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

Printed on: April 23, 2024 at 06:04 o'clock

Member: Skyemugen
Skyemugen Jun 24, 2011 at 15:10:23 (UTC)
Goto Top
Aloha und willkommen im Forum,

du benötigst dafür eine for-Schleife, wenn du fit bist, kannst du dir mit Hilfe von for /? und Tutorial zur FOR-Schleife die Sache ganz einfach selbst hinzaubern face-wink

Solltest du Probleme oder Fragen dann dazu noch haben, einfach melden.

greetz André
Mitglied: 60730
60730 Jun 24, 2011 at 15:12:27 (UTC)
Goto Top
moin,

*.jpg
C:\Ziel\%date:~-10,2%_%date:~-7,2%_%date:~-4%*.jpg
kann ja nicht, du mußt eine Schleife drumrum zimmern.

for /R C:\Quelle\ %a in (*.jpg) do echo xcopy %a.jpg C:\Ziel\%date:~-10,2%_%date:~-7,2%_%date:~-4%%~nxa /E /Y

Gruß

back-to-topedit


@ Skye - oda so...
wobei das ganze natürlich ziemlich schräg ist..
  • läuft diese Zeile an zwei verschiedenen Tagen, gibts doppelte gemoppelte, an drei Tagen usw usf.....
/edit
Member: Skyemugen
Skyemugen Jun 24, 2011 at 15:15:06 (UTC)
Goto Top
Aloha T-Mo,

was' mit dir heute los? Nimmst gleich die Arbeit ab und das bei einem Einzeiler? Tze tze tze, so kenne ich dich gar nicht *fg* - so bleibt da die Lernerfahrung für den TE?

greetz André
Mitglied: 60730
60730 Jun 24, 2011 at 15:18:25 (UTC)
Goto Top
[1/2OT]
Zitat von @Skyemugen:
Aloha T-Mo,

was' mit dir heute los? Nimmst gleich die Arbeit ab und das bei einem Einzeiler? Tze tze tze, so kenne ich dich gar nicht
*fg* - so bleibt da die Lernerfahrung für den TE?

greetz André

  • Hallo
  • incl. Beispiel, was er bereits hat
  • kein @echo off
  • kein linksfalschfehler

... da kann man schonmal als alter einzeller nen einzeiler opfern face-wink

[/1/2OT]
Member: RickTonalis
RickTonalis Jun 24, 2011 at 15:21:21 (UTC)
Goto Top
Um Gottes Willen!
Ihr seid ja bombastisch schnell.
War nur einmal im Keller und schon ist da ne Lösung!
Beindruckend.
Mit tiefen Verneigungen
Vielen Dank
Member: Skyemugen
Skyemugen Jun 24, 2011 at 15:22:03 (UTC)
Goto Top
[¾ OT] Aber er hat keine Codeformatierung genutzt Skandal![/¾ OT] face-wink
Member: bastla
bastla Jun 24, 2011 at 15:28:27 (UTC)
Goto Top
@t-mo
Etwas stimmiger (vor allem, wenn dann das "echo" weg sein wird), wäre es so:
for /R C:\Quelle\ %a in (*.jpg) do echo xcopy "%a" "C:\Ziel\%date:~-10,2%_%date:~-7,2%_%date:~-4%_%~nxa*" /Y
Auch wäre das Zusammensetzen (und Speichern in einer Variablen) des Datums vorweg zu empfehlen ...

Grüße
bastla
Member: RickTonalis
RickTonalis Jun 24, 2011 at 15:48:05 (UTC)
Goto Top
Hallo nochmal,
leider läuft es so noch nicht.
Ich kann auch keinen Fehler auslesen, weil mein "pause" am Ende der Datei nichts bewirkt.
Habt Ihr vielleicht noch einen Tipp?
Member: RickTonalis
RickTonalis Jun 24, 2011 at 16:13:17 (UTC)
Goto Top
Member: bastla
bastla Jun 24, 2011 at 17:26:00 (UTC)
Goto Top
Hallo LePimpon!

Die Zeile war auch zur Direkteingabe in der CMD-Shell gedacht - wenn Du sie in einem Batch verwenden willst, musst Du die Prozentzeichen der Laufvariablen verdoppeln:
@echo off & setlocal
set "Quelle=C:\Quelle"  
set "Ziel=C:\Ziel"  
set "Typ=jpg"  

set "Datum=%date:~-10,2%_%date:~-7,2%_%date:~-4%"  
for /R "%Quelle%" %%a in (*.%Typ%) do echo xcopy "%%a" "%Ziel%\%Datum%_%%~nxa*" /Y  
Solange das "echo" in der letzten Zeile steht, wird nur der Kopierbefehl angezeigt, aber nicht ausgeführt ...
Was es übrigens mit "%%~nxa" (Kurzform für "%%~na%%~xa") auf sich hat, erfährst Du mit "for /?" (falls Du lange genug durchhältst face-wink) ...

Grüße
bastla

P.S.: Das Datum würde ich im Zweifelsfall "JJJJ-MM-TT" schreiben ...
Member: RickTonalis
RickTonalis Jun 24, 2011 at 17:51:35 (UTC)
Goto Top
Super, vielen Dank.
Mit dem Datum hast du Recht, das lässt sich wesentlich besser sortieren. Es gibt nur noch ein Problem. Vielleicht hatte ich das nicht ganz klar ausgedrückt. Die Bilder müssten mit der entsprechenden Ordnerstruktur kopiert werden. Der Einzeiler vom Anfang übernahm das, überschrieb aber wie gesagt leider die Dateinamen, wenn ich diese erweitern wollte.
for /? wird schon ganz gebannt gelesen...
Kann ich für die jeweiligen Ordner evtl einen Teilstring von %%~dpa benutzen? Wenn ja, wie lese ich den aus?
Grüße
LePimpon
Member: bastla
bastla Jun 24, 2011 at 18:06:07 (UTC)
Goto Top
Hallo LePimpon!

Das sollte sich auch noch hinbekommen lassen:
@echo off & setlocal
set "Quelle=C:\Quelle"  
set "Ziel=C:\Ziel"  
set "Typ=jpg"  

set "Datum=%date:~-4%_%date:~-7,2%_%date:~-10,2%_"  
for /R "%Quelle%" %%a in (*.%Typ%) do set "Quellpfad=%%~dpa" & call :ProcessFile "%%a"  
goto :eof

:ProcessFile
call set "Zielpfad=%%Quellpfad:%Quelle%=%Ziel%%%"  
echo xcopy %1 "%Zielpfad%%Datum%_%~nx1*" /EY  
goto :eof
Da hier eine String-Ersetzung im Dateipfad erfolgt (%Quelle% wird durch %Ziel% ersetzt - siehe dazu "set /?"), kann nicht mit der Schleifenvariablen (%%a) gearbeitet werden, sondern es muss eine "gewöhnliche" Variable (%Quellpfad%) verwendet werden. Diese wird in der Schleife erstellt und dann in einem Unterprogramm verarbeitet.

Diesem Unterprogramm wird auch der komplette Dateipfad "%%a" übergeben. Da sich das Unterprogramm wie ein weiterer Batch verhält, kommt dort die übergebene Variable "%%a" als Parameter "%1" an.

Grüße
bastla
Member: RickTonalis
RickTonalis Jun 24, 2011 at 18:33:06 (UTC)
Goto Top
Also, was soll ich sagen. Vielen herzlichen Dank.
Funktioniert perfekt. Ein wunderschönes Wochenende wünsche ich!