Dateien mit von Leerzeichen befreiten Pfaden kopieren
Hallo zusammen,
ich brauche bitte Eure Hilfe.
Im Vorhinein: Die Batch soll auf Windows XP - PC's und Windows 2003 Server laufen.
Es geht um folgendes:
Ich brauche eine Batch, die ein Verzeichnis (z.B. d:\eigen Daten) komplett in ein neues Verzeichnis kopiert und dabei sämtliche Leerzeichen aus den Pfaden und Dateinamen entfernt. Quelle und Ziel sollten flexibel sein und als Parameter beim Aufruf übergeben werden können (Beispiel: DelSpaces.cmd "d:\eigene Daten" d:\neueDaten)
Beispielsweise sollte die Datei
d:\eigene Daten\Mein Test\Test der ersten Auflösung.bmp
dann unter
d:\neueDaten\MeinTest\TestdererstenAuflösung.bmp
oder (plus dem alten Pfad, wenn das einfacher ist)
d:\neueDaten\d_\eigeneDaten\MeinTest\TestdererstenAuflösung.bmp
wiederzufinden sein.
Kann mir jemand dabei helfen?
ich brauche bitte Eure Hilfe.
Im Vorhinein: Die Batch soll auf Windows XP - PC's und Windows 2003 Server laufen.
Es geht um folgendes:
Ich brauche eine Batch, die ein Verzeichnis (z.B. d:\eigen Daten) komplett in ein neues Verzeichnis kopiert und dabei sämtliche Leerzeichen aus den Pfaden und Dateinamen entfernt. Quelle und Ziel sollten flexibel sein und als Parameter beim Aufruf übergeben werden können (Beispiel: DelSpaces.cmd "d:\eigene Daten" d:\neueDaten)
Beispielsweise sollte die Datei
d:\eigene Daten\Mein Test\Test der ersten Auflösung.bmp
dann unter
d:\neueDaten\MeinTest\TestdererstenAuflösung.bmp
oder (plus dem alten Pfad, wenn das einfacher ist)
d:\neueDaten\d_\eigeneDaten\MeinTest\TestdererstenAuflösung.bmp
wiederzufinden sein.
Kann mir jemand dabei helfen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 120935
Url: https://administrator.de/contentid/120935
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
6 Kommentare
Neuester Kommentar
Hallo sysroy und willkommen im Forum!
Kaum getestet etwa so:
Um Quelle und Ziel als Aufrufparameter verwenden zu können, einfach die Zeilen 2 und 3 durch
ersetzen. Der Quellpfad darf übrigens nicht mit einem "\" enden.
Grüße
bastla
Kaum getestet etwa so:
@echo off & setlocal
set "Quelle=D:\Eigene Daten"
set "Ziel=D:\neueDaten"
for /f "delims=" %%i in ('dir /s /b /a-d "%Quelle%"') do set "Pfad=%%i" & call :CopyFile "%%i"
goto :eof
:CopyFile
call set "PfadNeu=%%Pfad:%Quelle%=%%"
set "PfadNeu=%PfadNeu: =%"
xcopy %1 "%Ziel%%PfadNeu%*">nul
goto :eof
set "Quelle=%~1"
set "Ziel=%~2"
Grüße
bastla
Hallo sysroy!
Grüße
bastla
Für mich zum Verständnis:
":CopyFile" kehrt wegen "Call" und dem "goto :eof " zum Aufrufsort in der For - Schleife zurück, oder?
Ja; würde es auch ohne "goto :eof", wenn danach kein weiterer Batch-Code folgt, ist so aber "sauberer".":CopyFile" kehrt wegen "Call" und dem "goto :eof " zum Aufrufsort in der For - Schleife zurück, oder?
Zweite Unklarheit:
09: call set "PfadNeu=%%Pfad:%Quelle%=%%" - warum CALL?
Da zuerst die Variable %Quelle% aufgelöst werden muss, könnte entweder "delayedExpansion" verwendet oder eben die Verarbeitung in einer weiteren CMD-Instanz (aufgerufen durch "call") vorgenommen werden - durch die doppelten %-Zeichen um die Variable "Pfad" herum wird diese als Variable übergeben, während für %Quelle% bereits der Wert eingesetzt wird, also im Prinzip:09: call set "PfadNeu=%%Pfad:%Quelle%=%%" - warum CALL?
set "PfadNeu=%Pfad:D:\Eigene Daten=%"
bastla
Was ist der Unterschied in der Parameterauswertung zwischen <set "Quelle=%~1"> mit Tilde und
<set "Quelle=%1"> ohne Tilde?
Mit der Schreibweise<set "Quelle=%1"> ohne Tilde?
set "Quelle=%~1"
Grüße
bastla