Wie wechsle ich zu einem Verzeichnis, das ein ! enthält?
c:
set "folder=d:\Anwendungsdaten\Fritz!\Faxeingang"
rem setlocal enabledelayedexpansion
set "drive=!folder:~0,2!"
%drive%
rem endlocal enabledelayedexpansion
set path="!folder:~2!"
setlocal enabledelayedexpansion
cd %path%
)
set drive
set path
set folder
pause
Das c: in der 1. Zeile dient nur dazu, dass das aktuelle Laufwerk nicht dem Ziellaufwerk entspricht.
Ich möchte folgende Befehle ausführen:
d:
cd \Anwendungsdaten\Fritz!\Faxeingang
Aber wie ich auch immer mit setlocal und endlocal umgehe, es klappt nicht. Entweder geht die 1. oder die 2. Zeile. Aber nie beide.
Was mache ich falsch?
Please also mark the comments that contributed to the solution of the article
Content-Key: 248716
Url: https://administrator.de/contentid/248716
Printed on: April 18, 2024 at 15:04 o'clock
15 Comments
Latest comment
Moin,
deine Zeilen lassen sich auf das hier reduzieren
Grüße Uwe
p.s. dein Fehler ist, das du die systemweit definierte Variable
deine Zeilen lassen sich auf das hier reduzieren
Set "folder=d:\Anwendungsdaten\Fritz!\Faxeingang"
cd /d "%folder%"
cd /d
übernimmt automatisch das wechseln auf das andere Laufwerk.Grüße Uwe
p.s. dein Fehler ist, das du die systemweit definierte Variable
path
verwendest (die bereits mit Pfaden gefüllt ist) und innerhalb von setlocal überschreibst. Nach einem endlocal
wird diese wieder auf Ihren Ursprungswert zurückgesetzt !! Siehe dazu: http://ss64.com/nt/setlocal.html
ganz einfach, Ausrufezeichen (bzw. das was zwischen diesen steht) werden, wenn enabledelayedexpansion aktiviert ist im String ausgewertet. Das führt dazu das das Ausrufezeichen quasi aus dem Pfad entfernt wird, wenn du es mit set einer Variablen zuweist.
Btw. benötigst du nicht unbedingt "delayed expansion" um Teile eines Strings auszulesen:
Btw. benötigst du nicht unbedingt "delayed expansion" um Teile eines Strings auszulesen:
@echo off
set "folder=d:\Anwendungsdaten\Fritz!\Faxeingang"
set "drive=%folder:~0,2%"
set "pfad=%folder:~2%"
habe ich doch oben schon geschrieben:
hier nochmal zum mitlesen ...
p.s. das lässt sich auch alles in einen Kommentar schreiben, anstatt dafür hier extra 3 Kommentare zu schreiben
hier nochmal zum mitlesen ...
@echo off
set "folder=d:\Anwendungsdaten\Fritz!\Faxeingang"
set "drive=%folder:~0,2%"
set "pfad=%folder:~2%"
echo %drive%
echo %pfad%
p.s. das lässt sich auch alles in einen Kommentar schreiben, anstatt dafür hier extra 3 Kommentare zu schreiben