Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Pfade mit Leerzeichen und/oder Sonderzeichen als Variable übergeben

Frage Entwicklung Batch & Shell

Mitglied: kl-A

kl-A (Level 1) - Jetzt verbinden

28.03.2007, aktualisiert 15:54 Uhr, 14838 Aufrufe, 10 Kommentare

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
Mitglied: Biber
28.03.2007 um 15:16 Uhr
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
Bitte warten ..
Mitglied: kl-A
28.03.2007 um 15:23 Uhr
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
Bitte warten ..
Mitglied: bastla
28.03.2007 um 15:23 Uhr
@Biber

Sollten beim "call" nicht auch noch Anführungdzeichen hin, also:
01.
for /F "delims=" %%j in (%LIST%) do call :SPIEGELN "%%j"
Grüße
bastla
Bitte warten ..
Mitglied: kl-A
28.03.2007 um 15:27 Uhr
@Biber

Sollten beim "call" nicht auch
noch Anführungdzeichen hin, also:
01.
for /F "delims=" %%j 
02.
> in (%LIST%) do call :SPIEGELN 
03.
> "%%j" 
04.
> 
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
Bitte warten ..
Mitglied: bastla
28.03.2007 um 15:38 Uhr
@8018_A

Die Umlaute werden bei passender Codepage funktionieren, also zB mit
01.
chcp 1252
bzw, wenn Du sie in der CMD-Shell eingibst (Stichwort: "edit").
Was den Pfad angeht:
01.
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):
01.
 for /f "delims=\ tokens=1*" %%i in (%1) do set "ZIELNAME=%%j"
oder auch:
01.
set "ZIEL=%~1" 
02.
set "ZIELNAME=%ZIEL:~3%"
Grüße
bastla
Bitte warten ..
Mitglied: kl-A
28.03.2007 um 15:44 Uhr
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
Bitte warten ..
Mitglied: bastla
28.03.2007 um 15:47 Uhr
@ 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]
Bitte warten ..
Mitglied: miniversum
28.03.2007 um 15:47 Uhr
So jetzt mal mein bescheidener Vorschlag:
01.
@echo off 
02.
chcp 1252 
03.
set LIST=backup_paths.txt 
04.
 
05.
for /F "delims=" %%j in (%LIST%) do call :SPIEGELN "%%j" 
06.
 
07.
goto :ENDE 
08.
 
09.
:SPIEGELN 
10.
 
11.
for /f "delims=\ tokens=1" %%i in (%1) do set ZIELNAME="%%i" 
12.
echo. 
13.
echo %ZIELNAME% 
14.
echo. 
15.
pause 
16.
REM robocopy %1 "H:\backup"\%ZIELNAME% /MIR 
17.
goto :EOF 
18.
 
19.
:ENDE 
20.
exit
miniversum

EDIT: chcp 1252 vergessen
Bitte warten ..
Mitglied: Biber
28.03.2007 um 15:48 Uhr
Moin kl_A und bastla,

stimmt, da habe ich auch zu flüchtig draufgeschaut, sorry.

Also nochmal im ganzen Satz:

01.
@echo off <b> & setlocal</b> 
02.
set "LIST=backup_paths.txt" 
03.
<b>chcp 1252</b> 
04.
for /F %%j <b>"delims="</b> in (%LIST%) do call :SPIEGELN <b>"%%j"</b> 
05.
 
06.
goto :ENDE 
07.
 
08.
:SPIEGELN 
09.
 
10.
for /f "delims=\ tokens=1*" %%i in <b>("%~1")</b> do set ZIELNAME=%%i 
11.
echo. 
12.
echo <b>Quellname [%~1] Zielname: [%ZIELNAME%]</b> 
13.
echo. 
14.
pause 
15.
REM robocopy <b>"%~1"</b> "H:\backup\%ZIELNAME%" /MIR 
16.
goto :EOF 
17.
 
18.
:ENDE 
19.
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]
Bitte warten ..
Mitglied: kl-A
28.03.2007 um 15:54 Uhr
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.
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (17)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...