Batch: Datei kopieren mit Leerzeichen im Pfad?
Hallo zusammen,
ich habe mir mit dem Befehl dir *.pdf /s /b >c:\neu\liste.txt sämtliche Pfade in die Date liste.txt schreiben lassen, welche ich kopieren möchte (die angegebene Datei kopieren).
Um die Datei zu kopieren arbeite ich die liste.txt in einer Schleife ab: for /f %i in (c:\neu\liste.txt) do (robocopy %i c:\neu) Problem dabei ist, dass in den Pfaden Leerzeichen enthalten sind (bspw.: C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\plug_ins\Annotations\Stamps\DEU\SignHere.pdf) I
ch habe schon alles mögliche ausprobiert, mir die Pfade versucht als Kurzpfad mit dem Zusatz /x herausschreiben zu lassen (funktioniert wohl nicht für jeden Pfad? Die Pfade sehen alle noch gleich aus, also mit Leerzeichen?), den Pfad habe ich auch schon (manuell) in Anführungszeichen gesetzt, beim kopieren kommt aber dennoch weiterhin der Fehler dass er die Datei nicht findet, da er nur den Pfad C:\Program nimmt..
Kann mir jemand weiterhelfen wie ich die Dateien trotz Leerzeichen kopiert bekomme?
2 Antworten
Versuch das mal:
for /f "tokens=1* delims=" %i in ("c:\neu\liste.txt") do @robocopy "%~i" "c:\neu"
Damit werden die Zeilen komplett ausgelesen, diese Dateinamen werden dann als %i übergeben und "%~i" entfernt ggf. vorhandene umschließende Anführungszeichen, um dann eindeutige Neue hinzuzufügen.
Es ist an der Befehlszeile immer ratsam, bei Datei-/Ordner-/Pfadnamen umschließende Anführungszeichen zu verwenden. So gibt es keine Missverständnisse.
Das ist mit Batch etwas umständlich:
entweder
for /L %C in (1,1,100) do (
set counter=0000%~C
set counter=%counter:~-4%
set myFile=File%counter%.txt
)
oder
set /a counter=0
for /R "." %F in (*) do (
set /a counter+=1
set myFile=0000%counter%
set myFile=File%myFile:~-4%.txt
)
In beiden Fällen wird eine fortlaufende 4-stellige Zahl mit führenden Nullen, beginnend mit "1" erzeugt und diese als Teil des Dateinamen benutzt: "File0001.txt", "File0002.txt", usw.
Außerdem kann dann jeweils der Dateiname als Variable genutzt werden, der dann universell eingesetzt werden kann.
Im ersten Beispiel Zählt die FOR-Schleife die fortlaufende Nummer (bis 100). Im zweiten Beispiel werden durch die FOR-Schleife alle Dateien rekursiv aufgelistet und für jede Datei wird eine Zahl weiter gezählt. Hier könntest Du auch z.B. "File" mit "%~F" ersetzen.
Beim Verwenden der Variable %myFile% musst Du diese dann in Anführungszeichen setzen.
setz den kompletten Pfad in " " also "C:\....."
dann gehts.
habe ich bereits versucht, er kommt dennoch nicht weiter als Program..
also so:
"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\plug_ins\Annotations\Stamps\DEU\"SignHere.pdf
also hab mir die RC-Syntax nochmal angeschaut. Wenn du explizit eine Datei angeben willst, dann erst die Quelle ...dann das Ziel und anschliessend die Datei angeben. das sollte klappen
lustiger Weise habe ich festgestellt, dass beim Auswählen des Zielverzeichnisses die Methode " " nicht funktioniert. Beim Quellverzeichnis aber schon.
also in deinem Falle wäre die Syntax so:
Robocoy "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\plug_ins\Annotations\Stamps\DEU\" "C:\Neu\" SignHere.pdf
ah ich hab den Fehler gefunden.....
robocopy "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\plug_ins\Annotations\Stamps\DEU" "C:\neu" SignHere.pdf
lass die abschliessenden Backslashs nach der Quell und Zielverzeichnissangabe weg, dann gehts..
besten Dank, das funktioniert so :)
Weißt du auch wie ich den Dateiname (der kopierten Datei) erweitern kann um bspw eine fortlaufende Nummer?