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?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 248716
Url: https://administrator.de/forum/wie-wechsle-ich-zu-einem-verzeichnis-das-ein-enthaelt-248716.html
Ausgedruckt am: 04.04.2025 um 05:04 Uhr
15 Kommentare
Neuester Kommentar
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