Pfade mit Leerzeichen und/oder Sonderzeichen als Variable übergeben
Hallo,
ich möchte in einem Script verschieden Verzeichnisse per robocopy spiegeln.
die verzeichnisse möchte ich per textdatei als variablen übergeben.
mein problem verzeichnisse mit leerzeichen und umlauten werden nicht korrekt als variable übernommen.
beispiel textdatei:
E:\Verzeichnis1
C:\Äbc täÄst
Y:\Öirgednwas xxx
Das Script:
@echo off
set LIST=backup_paths.txt
for /F %%j in (%LIST%) do call :SPIEGELN %%j
goto :ENDE
:SPIEGELN
for /f "delims=\ tokens=1" %%i in ("%1") do set ZIELNAME=%%i
echo.
echo %ZIELNAME%
echo.
pause
REM robocopy "%1" "H:\backup\%ZIELNAME%" /MIR
goto :EOF
:ENDE
exit
Was muss ich ändern? oder geht es einfacher?
gruss kl_A
ich möchte in einem Script verschieden Verzeichnisse per robocopy spiegeln.
die verzeichnisse möchte ich per textdatei als variablen übergeben.
mein problem verzeichnisse mit leerzeichen und umlauten werden nicht korrekt als variable übernommen.
beispiel textdatei:
E:\Verzeichnis1
C:\Äbc täÄst
Y:\Öirgednwas xxx
Das Script:
@echo off
set LIST=backup_paths.txt
for /F %%j in (%LIST%) do call :SPIEGELN %%j
goto :ENDE
:SPIEGELN
for /f "delims=\ tokens=1" %%i in ("%1") do set ZIELNAME=%%i
echo.
echo %ZIELNAME%
echo.
pause
REM robocopy "%1" "H:\backup\%ZIELNAME%" /MIR
goto :EOF
:ENDE
exit
Was muss ich ändern? oder geht es einfacher?
gruss kl_A
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 55283
Url: https://administrator.de/contentid/55283
Ausgedruckt am: 23.11.2024 um 01:11 Uhr
10 Kommentare
Neuester Kommentar
Moin, kl_A,
ist schon alles ok so.
Du musst nur beim Lesen der Textdatei auch angeben, dass die komplette Zeile gelesen werden soll.
Streiche: for /F %%j in (%LIST%) do call :SPIEGELN %%j
Setze: for /F "delims=" %%j in (%LIST%) do call :SPIEGELN %%j
Andernfalls wird nur das erste Word/Token in der %LIST%-Datei-Zeile weitergegeben.
Ansonsten finde ich Deinen Schnipsel schön lesbar und pflegbar - so sollten Batche sein.
Gruss
Biber
ist schon alles ok so.
Du musst nur beim Lesen der Textdatei auch angeben, dass die komplette Zeile gelesen werden soll.
Streiche: for /F %%j in (%LIST%) do call :SPIEGELN %%j
Setze: for /F "delims=" %%j in (%LIST%) do call :SPIEGELN %%j
Andernfalls wird nur das erste Word/Token in der %LIST%-Datei-Zeile weitergegeben.
Ansonsten finde ich Deinen Schnipsel schön lesbar und pflegbar - so sollten Batche sein.
Gruss
Biber
@Biber
Sollten beim "call" nicht auch noch Anführungdzeichen hin, also:
Grüße
bastla
Sollten beim "call" nicht auch noch Anführungdzeichen hin, also:
for /F "delims=" %%j in (%LIST%) do call :SPIEGELN "%%j"
Grüße
bastla
@kl_a
Die Umlaute werden bei passender Codepage funktionieren, also zB mit
bzw, wenn Du sie in der CMD-Shell eingibst (Stichwort: "edit").
Was den Pfad angeht:
sollte für den Fall genügen, dass Du nur einen Backslash im Pfad hast - ansonsten eher (oder ohnehin besser):
oder auch:
Grüße
bastla
Die Umlaute werden bei passender Codepage funktionieren, also zB mit
chcp 1252
Was den Pfad angeht:
for /f "delims=\ tokens=2" %%i in (%1) do set "ZIELNAME=%%i"
for /f "delims=\ tokens=1*" %%i in (%1) do set "ZIELNAME=%%j"
set "ZIEL=%~1"
set "ZIELNAME=%ZIEL:~3%"
Grüße
bastla
So jetzt mal mein bescheidener Vorschlag:
miniversum
EDIT: chcp 1252 vergessen
@echo off
chcp 1252
set LIST=backup_paths.txt
for /F "delims=" %%j in (%LIST%) do call :SPIEGELN "%%j"
goto :ENDE
:SPIEGELN
for /f "delims=\ tokens=1" %%i in (%1) do set ZIELNAME="%%i"
echo.
echo %ZIELNAME%
echo.
pause
REM robocopy %1 "H:\backup"\%ZIELNAME% /MIR
goto :EOF
:ENDE
exit
miniversum
EDIT: chcp 1252 vergessen
Moin kl_A und bastla,
stimmt, da habe ich auch zu flüchtig draufgeschaut, sorry.
Also nochmal im ganzen Satz:
Bei der neuen Zeile "chcp 1252" == setze Windows-Codepage musst Du nochmal schauen, ob dass Dein Umlaut-Problem behebt.
Wahrscheinlich ist die %LIST%-Datei mit Notepad erstellt und daher in einer anderen Codepage gespeichert als die Default-CMD-Codepage 850-
Gruss
Biber
[Edit] Zu spät... schon alles von bastla und miniversum eingetütet...
Prima Forum hier... [/Edit]
stimmt, da habe ich auch zu flüchtig draufgeschaut, sorry.
Also nochmal im ganzen Satz:
@echo off <b> & setlocal</b>
set "LIST=backup_paths.txt"
<b>chcp 1252</b>
for /F %%j <b>"delims="</b> in (%LIST%) do call :SPIEGELN <b>"%%j"</b>
goto :ENDE
:SPIEGELN
for /f "delims=\ tokens=1*" %%i in <b>("%~1")</b> do set ZIELNAME=%%i
echo.
echo <b>Quellname [%~1] Zielname: [%ZIELNAME%]</b>
echo.
pause
REM robocopy <b>"%~1"</b> "H:\backup\%ZIELNAME%" /MIR
goto :EOF
:ENDE
exit
Bei der neuen Zeile "chcp 1252" == setze Windows-Codepage musst Du nochmal schauen, ob dass Dein Umlaut-Problem behebt.
Wahrscheinlich ist die %LIST%-Datei mit Notepad erstellt und daher in einer anderen Codepage gespeichert als die Default-CMD-Codepage 850-
Gruss
Biber
[Edit] Zu spät... schon alles von bastla und miniversum eingetütet...
Prima Forum hier... [/Edit]