Frage von lisa272, 32

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?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von MarkusGenervt, 15

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.

Kommentar von lisa272 ,

besten Dank, das funktioniert so :)

Weißt du auch wie ich den Dateiname (der kopierten Datei) erweitern kann um bspw eine fortlaufende Nummer?

Kommentar von MarkusGenervt ,

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.

Antwort
von Maisbaer78, 9

setz den kompletten Pfad in " "    also "C:\....."

dann gehts.

Kommentar von lisa272 ,

habe ich bereits versucht, er kommt dennoch nicht weiter als Program..

Kommentar von Maisbaer78 ,

oh hab ich übersehen, sry.

setz das 2. " mal vor dem dateinamen.

Kommentar von Maisbaer78 ,

also so:

"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\plug_ins\Annotations\Stamps\DEU\"SignHere.pdf

Kommentar von Maisbaer78 ,

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

Kommentar von Maisbaer78 ,

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..

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten