Top-Themen

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, 10427 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
Batch & Shell
Robocopy bleibt stehen bei einer datei
gelöst Frage von shooanBatch & Shell8 Kommentare

Habbo, ich habe hier ein kleines Problem mit meinem Script das mir meine Dateien Kopieren soll. Es bleibt einfach ...

Windows Tools
Robocopy: Mehrere Vereichnisse in eine Variable einlesen
gelöst Frage von RegNovWindows Tools4 Kommentare

Hallo zusammen, ich möchte eine bestimme Datei in sehr viele Verzeichnisse kopieren. Soweit eigt. keine große Sache - leider ...

Batch & Shell
Robocopy - Das System kann die angegebene Datei nicht finden
gelöst Frage von imebroBatch & Shell15 Kommentare

Hallo, ich habe eine 1TB Festplatte in 2 Partitionen aufgeteilt (D und F). Nun möchte ich Daten von der ...

Windows Tools
Robocopy kopiert täglich unveränderte Dateien
Frage von Tobias15Windows Tools8 Kommentare

Hallo zusammen, Ich habe zwar sehr aufmerksam die Fälle gelesen wo der unscharfe /FFT Parameter erfolgreich dazu führt, dass ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 104 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server13 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...

Windows Server
GPO nur für bestimmte Computer
Frage von Leo-leWindows Server13 Kommentare

Hallo Forum, gern würde ich ein Robocopy script per Bat an eine GPO hängen. Wichtig wäre aber dort der ...

Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
Frage von HelloWorldBatch & Shell13 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...