Robocopy mehrerer Dateien
Hallo Leute,
ich will eine unbestimmte Anzahl von Dateien gleicher Dateiendung (*.ods) mit Robocopy vom Desktop in einen Ordner kopieren. Beim Kopieren sollen die Dateien in %USERNAME%_Dateiname_%laufendeNummer%.xxx umbenannt werden. Wie kann ich am Besten die laufende Nummer erzeugen?
Grüße
dabjoern
ich will eine unbestimmte Anzahl von Dateien gleicher Dateiendung (*.ods) mit Robocopy vom Desktop in einen Ordner kopieren. Beim Kopieren sollen die Dateien in %USERNAME%_Dateiname_%laufendeNummer%.xxx umbenannt werden. Wie kann ich am Besten die laufende Nummer erzeugen?
Grüße
dabjoern
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 21102
Url: https://administrator.de/forum/robocopy-mehrerer-dateien-21102.html
Ausgedruckt am: 24.12.2024 um 12:12 Uhr
9 Kommentare
Neuester Kommentar
Moin dabjoern,
wenn Du schon so weit bist, lohnt sich der Einsatz von Robocopy ja kaum noch.
die paar restlichen Zeilen bekommst du dann mit einem normalen Copy hin.
Vorweg: Zwei Sachen begreife ich nicht (bzw. langsamer als andere):
a) ...ööhm, Dein COUNTer fängt dann immer wieder bei 1 an? Auch wenn Du jeden Tag sicherst? Da wird es aber schnell Dateinamenskollisionen geben.. Ich würde eher den bisherigen höchsten vergebenen COUNTer je %USERNAME% ermitteln und von da an weiterzählen... egal - dann musst du wenigstens festlegen, wie sich der Batch sinnvoll verhalten soll, wenn Datei "HeinzUser_035.ods" kopiert werden soll und schon im Zielverzeichnis existiert...
b) Was Du in der ersten FOR /F IN..DO..-Schleife machst ode glaubst zu tun) versteh ich nicht. Warteschleife?
Ich würde es sinngemäß so abfackeln (ist natürlich ungetestet):
@echo off & setlocal
...
...
Set "Counter=10000"
for /f %%i in ('dir /b "%USERPROFILE%\desktop\*.ods"') do call :copyLfd "%%i"
goto :eof
:copyLfd
set /a Counter+=1
Set "CounterLast4Chars=%counter:~-4%
Copy "%~dpnx1" "x:\y\Neuerordner\%Username%_%~n1_%CounterLast4Chars%.%~x1"
goto :eof
~~~~
Das wars.
Und, wie geschrieben, ich würde den Zähler nicht immer bei 1 anfangen lassen.
HTH Biber
[Edit] sorry, hatte nur langsamer getippt - ist noch keine Antwort auf Dein P.S., sondern parallel entstanden. Jetzt warte ich erstmal, welche Variante Du weiterführst... [/Edit]
wenn Du schon so weit bist, lohnt sich der Einsatz von Robocopy ja kaum noch.
die paar restlichen Zeilen bekommst du dann mit einem normalen Copy hin.
Vorweg: Zwei Sachen begreife ich nicht (bzw. langsamer als andere):
a) ...ööhm, Dein COUNTer fängt dann immer wieder bei 1 an? Auch wenn Du jeden Tag sicherst? Da wird es aber schnell Dateinamenskollisionen geben.. Ich würde eher den bisherigen höchsten vergebenen COUNTer je %USERNAME% ermitteln und von da an weiterzählen... egal - dann musst du wenigstens festlegen, wie sich der Batch sinnvoll verhalten soll, wenn Datei "HeinzUser_035.ods" kopiert werden soll und schon im Zielverzeichnis existiert...
b) Was Du in der ersten FOR /F IN..DO..-Schleife machst ode glaubst zu tun) versteh ich nicht. Warteschleife?
Ich würde es sinngemäß so abfackeln (ist natürlich ungetestet):
@echo off & setlocal
...
...
Set "Counter=10000"
for /f %%i in ('dir /b "%USERPROFILE%\desktop\*.ods"') do call :copyLfd "%%i"
goto :eof
:copyLfd
set /a Counter+=1
Set "CounterLast4Chars=%counter:~-4%
Copy "%~dpnx1" "x:\y\Neuerordner\%Username%_%~n1_%CounterLast4Chars%.%~x1"
goto :eof
~~~~
Das wars.
Und, wie geschrieben, ich würde den Zähler nicht immer bei 1 anfangen lassen.
HTH Biber
[Edit] sorry, hatte nur langsamer getippt - ist noch keine Antwort auf Dein P.S., sondern parallel entstanden. Jetzt warte ich erstmal, welche Variante Du weiterführst... [/Edit]
Moin dabjoern,
a) die Anweisung "goto :eof" entspricht in etwa dem "RETURN" oder "END SUB" anderer Skriptsprachen. Ist eine interne Anweisung, d.h. es braucht keine Sprungmarke namens ":eof" definiert werden (Kannst auch Deine letzte Zeile wieder löschen, sonst verwirrst Du den CLI nur). Ich würde "goto :eof" also hier eher übersetzen mit "goto End-Of-Function" als mit "goto End-of-File".
b) das EOF-Zeichen ist Control-Z. Ja. Brauchte man/frau zu Edlin-Zeiten hin und wieder. Hat heute keine Bedeutung mehr. Abheften und bei Bedarf wieder vorholen.
c) >> ohne goto-Anweisungen rennt er dreimal um die Dörfer...
Jepp. Genau deshalb stehen ja die Goto-Anweisungen da. Der Batch ist ja eigentlich zu Ende nach der FOR...IN..DO-Anweisung. Da heißt "goto :Eof" wirklich "gehe zum Ende/RETURN".
Danach kommt noch ein "Unterblock"/eine "SubRoutine namens ":copyLfd". Deren Ende/deren "END SUB" wird im Batch wieder durch die Standard-Phrase "goto :eof" gekennzeichnet.
HTH und schönes Wochenende
Biber
a) die Anweisung "goto :eof" entspricht in etwa dem "RETURN" oder "END SUB" anderer Skriptsprachen. Ist eine interne Anweisung, d.h. es braucht keine Sprungmarke namens ":eof" definiert werden (Kannst auch Deine letzte Zeile wieder löschen, sonst verwirrst Du den CLI nur). Ich würde "goto :eof" also hier eher übersetzen mit "goto End-Of-Function" als mit "goto End-of-File".
b) das EOF-Zeichen ist Control-Z. Ja. Brauchte man/frau zu Edlin-Zeiten hin und wieder. Hat heute keine Bedeutung mehr. Abheften und bei Bedarf wieder vorholen.
c) >> ohne goto-Anweisungen rennt er dreimal um die Dörfer...
Jepp. Genau deshalb stehen ja die Goto-Anweisungen da. Der Batch ist ja eigentlich zu Ende nach der FOR...IN..DO-Anweisung. Da heißt "goto :Eof" wirklich "gehe zum Ende/RETURN".
Danach kommt noch ein "Unterblock"/eine "SubRoutine namens ":copyLfd". Deren Ende/deren "END SUB" wird im Batch wieder durch die Standard-Phrase "goto :eof" gekennzeichnet.
HTH und schönes Wochenende
Biber