kl-a
Goto Top

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

Content-ID: 55283

Url: https://administrator.de/forum/pfade-mit-leerzeichen-und-oder-sonderzeichen-als-variable-uebergeben-55283.html

Ausgedruckt am: 23.12.2024 um 18:12 Uhr

Biber
Biber 28.03.2007 um 15:16:18 Uhr
Goto Top
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
kl-A
kl-A 28.03.2007 um 15:23:18 Uhr
Goto Top
hi, danke f. die schnelle antwort, aber es ändert sich nichts.
ich lasse mir ja mit echo die variablen anzeigen.

ich bekomme wie vorher nur den teil bis im verzeichnis ein leerzeichen kommt und die umlaute werden auch nicht korrekt angezeigt.
z. beispiel beim verzeichnis C:\Äbc täÄst bekomm eich nur -ab zurück.


und noch ein kleiner fehler meinerseits.
es muss richtig heißen for /f "delims=\ tokens=2" %%i in ("%1") do set ZIELNAME=%%i
nicht //token=1

gruss kl_A
bastla
bastla 28.03.2007 um 15:23:42 Uhr
Goto Top
@Biber

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
kl-A 28.03.2007 um 15:27:35 Uhr
Goto Top
@Biber

Sollten beim "call" nicht auch
noch Anführungdzeichen hin, also:
for /F "delims=" %%j  
> in (%LIST%) do call :SPIEGELN
> "%%j"  
> 

Grüße
bastla

hi wenn ich die anführungszeichen setze bekomme ich jetzt den kompletten pfad, aber mit einem anführunsgzeichen hinten dran. und die umlaute gehen auch nicht
bastla
bastla 28.03.2007 um 15:38:33 Uhr
Goto Top
@kl_a

Die Umlaute werden bei passender Codepage funktionieren, also zB mit
chcp 1252
bzw, wenn Du sie in der CMD-Shell eingibst (Stichwort: "edit").
Was den Pfad angeht:
for /f "delims=\ tokens=2" %%i in (%1) do set "ZIELNAME=%%i"  
sollte für den Fall genügen, dass Du nur einen Backslash im Pfad hast - ansonsten eher (oder ohnehin besser):
 for /f "delims=\ tokens=1*" %%i in (%1) do set "ZIELNAME=%%j"  
oder auch:
set "ZIEL=%~1"  
set "ZIELNAME=%ZIEL:~3%"  

Grüße
bastla
kl-A
kl-A 28.03.2007 um 15:44:04 Uhr
Goto Top
hi bastla,

jo das isses. jetzt geht's. das mit den pfaden mit mehr als einem \ ist mir auch gerade noch eingefallen.
das mit der codepage versteh ich schon, nur möchte ich nicht das die user die pfasde per shell cmd eingeben, sondern normal als textdatei im editor. shell kann ich denen nicht zumuten.

mit chcp kann ich die codepage angeben.
wenn ich chcp 850 setze werden die umlaute trotzdem nicht dargestellt

gruss
bastla
bastla 28.03.2007 um 15:47:26 Uhr
Goto Top
@ kl_A

wenn ich chcp 850 setze werden die umlaute trotzdem nicht dargestellt
Du brauchst chcp 1252.

Grüße
bastla

[Edit] An editierten Beitrag von kl_A angepasst. [/Edit]
miniversum
miniversum 28.03.2007 um 15:47:28 Uhr
Goto Top
So jetzt mal mein bescheidener Vorschlag:
@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
Biber
Biber 28.03.2007 um 15:48:42 Uhr
Goto Top
Moin kl_A und bastla,

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... face-wink [/Edit]
kl-A
kl-A 28.03.2007 um 15:54:49 Uhr
Goto Top
mit codepage 1252 geht es auch nicht. aber vielleicht liegts auch an meinem vista englisch mit deutschen sprachpaket?
wenn ich ne cmd shell aufmache und mir die aktuelle codepage anzeigen lasse, ist das 850

[edit] sorry ich bin zu blöd. geht natürlich. auch mit den umlauten. werden nur bei der ausgabe im cmd fenster anders angezeigt. wenn ich mit mkdir die pfade erstellen lassen passt das alles.