Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Robocopy mehrerer Dateien

Frage Entwicklung Batch & Shell

Mitglied: dabjoern

dabjoern (Level 1) - Jetzt verbinden

06.12.2005, aktualisiert 12.12.2005, 10414 Aufrufe, 9 Kommentare

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
Mitglied: dabjoern
07.12.2005 um 20:24 Uhr
Hi Leute,

ich habe nun dieses Skript zusammengestellt.

@echo off
REM
REM In Datei alle .ods speichern mit /b - ohne Kopfdaten
dir "%USERPROFILE%\desktop\*.ods" /b 1>_dateiliste.tmp
REM In Variablen Dateinamen speichern
for /f "tokens=1,2,3,4,5,6,7,8,*" %%i in (_dateiliste.tmp) do set /a %%i %%j %%k %%l %%m %%n %%o %%p %%q
REM In Datei alle .ods Dateien (mit Anzahl) speichern
dir "%USERPROFILE%\desktop\*.ods" 1>_dateiliste2.tmp
REM In Datei die Anzahl der .ods Dateien speichern (mit Zusatzinformationen)
REM /c zeigt nur die Anzahl der die Zeichenfolge enthaltenden Zeilen an
find "ods" _dateiliste2.tmp /c >_dateianzahl.tmp
REM In Variable COUNT die Zahl der Variable c speichern
for /f "skip=1 tokens=1,2,3 delims=: " %%a in (_dateianzahl.tmp) do set /a COUNT=%%c

Also nun habe ich in der Datei _dateiliste.tmp alle Dateinamen und in der Variable COUNT die Anzahl der Dateien.

Aber jetzt weiß ich nicht, wie die Schleife lauten müsste, damit die x Dateien auf dem Desktop nach obigen Anforderungen umbenannt werden. Hat jemand einen Tipp? Danke im Voraus.

Grüße
dabjoern
Bitte warten ..
Mitglied: dabjoern
07.12.2005 um 20:57 Uhr
Okay, ich habe gesehen, dass es auch einfacher geht:

@echo off
cls
REM
REM In Datei alle .ods speichern mit /b --> ohne Kopfdaten und aehnliches
dir "%USERPROFILE%\desktop\*.ods" /b 1>_dateiliste.tmp
for /f %%i in (_dateiliste.tmp) do (rename "%USERPROFILE%\Desktop\%%i" "%USERNAME%_%%i")


)

Jetzt habe ich nur noch das Problem, dass Dateinamen mit Leerzeichen nicht umbenannt werden.

Grüße
dabjoern
Bitte warten ..
Mitglied: Biber
07.12.2005 um 21:19 Uhr
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]
Bitte warten ..
Mitglied: dabjoern
07.12.2005 um 22:44 Uhr
Hallo auch,

also arbeite zum ersten Mal mit for-Schleifen. Insofern sei der obige "Quatsch" mal entschuldigt Also ich woll einfach die Dateien mit einer laufenden Nummer versehen und den Zähler nicht zurücksetzen. Des Weiteren würde ich schon gern mit Robocopy arbeiten aufgrund der Logfile-Erstellung.

Zwei Fragen:
1) Kann es sein, dass Robocopy beim Kopieren die Dateinamen nicht umbenennen kann? Also was in der Form:

dir "%USERPROFILE%\desktop\*.ods" /b 1>_dateiliste.tmp
for /f "usebackq" %%i in (_dateiliste.tmp) do (robocopy "%USERPROFILE%\Desktop" "d:\pruefung\dest" %%i "%USERNAME%_%%i" /A-:rsh /LOG+:d:\pruefung\log\%USERNAME%_start_log.log)

2) Wenn das Robocopy nicht kann, dann möchte ich die Dateien vorher per rename umbenennen. Ich habe das Gefühlt, dass es da noch einige Besonderheiten bezüglich Leerzeichen in Dateinamen gibt:

dir "%USERPROFILE%\desktop\*.ods" /b 1>_dateiliste.tmp
for /f %%i in (_dateiliste.tmp) do (rename "%USERPROFILE%\Desktop\%%i" "%USERNAME%_%%i")

--> Dieser Code packt es noch nicht, Dateien mit Leerzeichen umzubenennen. Dasmit dem usebackq hab ich noch nicht ganz verstanden.

Grüße
dabjoern
Bitte warten ..
Mitglied: dabjoern
07.12.2005 um 23:51 Uhr
Also dieses Teil tut schonmal seine Aufgabe ganz gut. Dateien mit Leerzeichen werden bearbeitet:

for /f "delims=" %%i in ('dir "%USERPROFILE%\desktop\*.ods" /b') do (rename "%USERPROFILE%\Desktop\%%i" "%USERNAME%_%%i")

Jetzt ist nur noch kein Counter drinnen.

Grüße
dabjoern
Bitte warten ..
Mitglied: dabjoern
08.12.2005 um 21:46 Uhr
Hi auch,

das Skript funktioniert nun super. Danke an den Biber )

@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 "countersnip=%counter:~-4%
rename "%~dpnx1" "%USERNAME%_%~n1_%countersnip%%~x1"
goto :eof
:eof

Nur mal eine kurze Frage: Was bedeutet dieses eof immer? Auf der Seite http://www.antonis.de/dos/batchtut/bat-kurs/ hab ich das gelesen: EOF-Zeichen = Control-Z. Das sollte doch dann ein Abbrechen des Batchvorganges bedeuten, oder?

Und nochwas: habe ich die goto-Anweisungen nicht drinnen, will er das Ganze 3 mal durchlaufen (obwohl nur 2 ods Dateien auf dem Desktop liegen). Wieso das?

Grüße und vielen vielen Dank
dabjoern
Bitte warten ..
Mitglied: Biber
09.12.2005 um 10:36 Uhr
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
Bitte warten ..
Mitglied: dabjoern
09.12.2005 um 10:44 Uhr
Danke dir tausendmal. Gestern Nacht hatte ich noch ein Tutorial von dir gelesen (findlongpath Teil 1). Dort hattest du schon ein wenig eof erklärt. Aber hier gefällt es mir noch besser. Vielen Dank und auch dir ein schönes WE.

Grüße
dabjoern
Bitte warten ..
Ähnliche Inhalte
Windows Server
Schattenkopien mit Robocopy (11)

Frage von AveiroCR7 zum Thema Windows Server ...

Batch & Shell
gelöst Robocopy XF und die Probleme mit der Dateiendung (2)

Frage von Ebisumaru zum Thema Batch & Shell ...

Batch & Shell
gelöst Robocopy geht und geht nicht gerade nicht (9)

Frage von TicTakTeo zum Thema Batch & Shell ...

Batch & Shell
gelöst Robocopy log Angabe der Zeiten - Verständnissfrage (3)

Frage von NetMare zum Thema Batch & Shell ...

Neue Wissensbeiträge
Sicherheits-Tools

Trendmicro OSCE und das Fall Creators Update Win10 RS3

(3)

Information von Henere zum Thema Sicherheits-Tools ...

Microsoft Office

Text in Zahlen umwandeln

Tipp von logische zum Thema Microsoft Office ...

Erkennung und -Abwehr

Infineon TPMs unsicher! Bitlocker ggf. angreifbar

(4)

Information von Lochkartenstanzer zum Thema Erkennung und -Abwehr ...

Firewall

PfSense Repository für Version 2.3.x

(6)

Information von Dobby zum Thema Firewall ...

Heiß diskutierte Inhalte
Microsoft Office
ICH BIN AM ENDE MEINES IT-WISSENS ANGELANGT!!!! (38)

Frage von 134537 zum Thema Microsoft Office ...

Windows Server
gelöst Gruppenrichtlinie greift nicht zu! (23)

Frage von Syosse zum Thema Windows Server ...

Hosting & Housing
Mailserver Software Empfehlungen (21)

Frage von sunics zum Thema Hosting & Housing ...