cottonwood
Goto Top

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?

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

DonMatze
DonMatze 10.09.2014 um 03:04:55 Uhr
Goto Top
Moin,

bekommst du eine Fehlermeldung, o.ä.?


Viele Grüße
Matze
certifiedit.net
certifiedit.net 10.09.2014 um 06:27:48 Uhr
Goto Top
Wenn du in der Kommandoconsole bist, führe den Befehl "cd " (deinpfad) einfach aus, hier wird dir klar gezeigt, wie es auszusehen hat ;) (Hilfe zur Selbsthilfe)
colinardo
colinardo 10.09.2014 aktualisiert um 08:11:09 Uhr
Goto Top
Moin,
deine Zeilen lassen sich auf das hier reduzieren face-wink
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
Cottonwood
Cottonwood 10.09.2014 aktualisiert um 11:39:46 Uhr
Goto Top
@DonMatze:
Je nach Vorgehensweise bekomme ich auch eine Fehlermeldung.
Im günstigsten Fall wird das ! einfach ignoriert. Dadurch funktioniert natürlich der cd nicht.

Ich habe mal vier Beispiele gemacht. Die hänge ich aber der Übersicht halber als getrennte Antworten hinten an.
Cottonwood
Cottonwood 10.09.2014 aktualisiert um 12:38:56 Uhr
Goto Top
@certifiedit.net:
Die Syntax des Befehls ist nicht das Problem.
Cottonwood
Cottonwood 10.09.2014 um 11:37:50 Uhr
Goto Top
Danke für deinen konstruktiven Vorschlag. Damit sollte es gehen.

Ich möchte aber auch das Problem verstehen.
colinardo
colinardo 10.09.2014 aktualisiert um 11:49:05 Uhr
Goto Top
Zitat von @Cottonwood:
Ich möchte aber auch das Problem verstehen.
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:
@echo off 
set "folder=d:\Anwendungsdaten\Fritz!\Faxeingang"   
set "drive=%folder:~0,2%"  
set "pfad=%folder:~2%"  
Cottonwood
Cottonwood 10.09.2014 um 12:21:07 Uhr
Goto Top
Hier fehlt das ! im Pfad (siehe ganz unten)


cd\
c:
setlocal enabledelayedexpansion
set "folder=d:\Anwendungsdaten\Fritz!\Faxeingang"  
set "drive=!folder:~0,2!"  
%drive%
set path="!folder:~2!"  
cd %path%
)
set drive
set path
set folder


cd\

D:\>c:

C:\>setlocal enabledelayedexpansion

C:\>set "folder=d:\Anwendungsdaten\Fritz!\Faxeingang"  

C:\>set "drive=!folder:~0,2!"  

Hier fehlt das ! im Pfad


C:\>d:

D:\>set path="!folder:~2!"  

D:\>cd "\Anwendungsdaten\Fritz\Faxeingang"  
Das System kann den angegebenen Pfad nicht finden.

D:\>set drive
drive=d:

D:\>set path
Path="\Anwendungsdaten\Fritz\Faxeingang"  
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

D:\>set folder
folder=d:\Anwendungsdaten\Fritz\Faxeingang
Cottonwood
Cottonwood 10.09.2014 um 12:28:05 Uhr
Goto Top
Hier wird das Laufwerk nicht richtig zugewiesen


c:
set "folder=d:\Anwendungsdaten\Fritz!\Faxeingang"  
set "drive=!folder:~0,2!"  
%drive%
set path="!folder:~2!"  
cd %path%
)
set drive
set path
set folder


c:

C:\>set "folder=d:\Anwendungsdaten\Fritz!\Faxeingang"  

C:\>set "drive=!folder:~0,2!"  

C:\>!folder:~0,2!
Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung
ist falsch.

C:\>set path="!folder:~2!"  

C:\>cd "!folder:~2!"  
Das System kann den angegebenen Pfad nicht finden.

C:\>set drive
drive=!folder:~0,2!

C:\>set path
Path="!folder:~2!"  
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

C:\>set folder
folder=d:\Anwendungsdaten\Fritz!\Faxeingang
Cottonwood
Cottonwood 10.09.2014 aktualisiert um 12:31:03 Uhr
Goto Top
Hier wird im richtig abgetrennten Pfad beim cd das ! nicht berücksichtigt.


cd\
c:
set "folder=d:\Anwendungsdaten\Fritz!\Faxeingang"  
setlocal enabledelayedexpansion
set "drive=!folder:~0,2!"  
%drive%
set path="!folder:~2!"  
cd %path%
)
set drive
set path
set folder


cd\

D:\>c:

C:\>set "folder=d:\Anwendungsdaten\Fritz!\Faxeingang"  

C:\>setlocal enabledelayedexpansion

C:\>set "drive=!folder:~0,2!"  

Hier wird im richtig abgetrennten Pfad beim cd das ! nicht berücksichtigt.


C:\>d:

D:\>set path="!folder:~2!"  

D:\>cd "\Anwendungsdaten\Fritz!\Faxeingang"  
Das System kann den angegebenen Pfad nicht finden.

D:\>set drive
drive=d:

D:\>set path
Path="\Anwendungsdaten\Fritz!\Faxeingang"  
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

D:\>set folder
folder=d:\Anwendungsdaten\Fritz!\Faxeingang
colinardo
colinardo 10.09.2014 aktualisiert um 12:34:33 Uhr
Goto Top
habe ich doch oben schon geschrieben:
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
Cottonwood
Cottonwood 10.09.2014 um 12:36:56 Uhr
Goto Top
Bei endlocal werden das Laufwerk und die Variable %drive% zurückgesetzt.


set "drive=!folder:~0,2!"  
%drive%
endlocal enabledelayedexpansion
set path="!folder:~2!"  
setlocal enabledelayedexpansion
cd %path%
)
set drive
set path
set folder


cd\

D:\>c:

C:\>set "folder=d:\Anwendungsdaten\Fritz!\Faxeingang"  

C:\>setlocal enabledelayedexpansion

C:\>set "drive=!folder:~0,2!"  

C:\>d:

D:\>endlocal enabledelayedexpansion

C:\>set path="!folder:~2!"  

C:\>setlocal enabledelayedexpansion

C:\>cd "!folder:~2!"  
Das System kann den angegebenen Pfad nicht finden.

C:\>set drive
Die Umgebungsvariable "drive" ist nicht definiert.  

C:\>set path
Path="!folder:~2!"  
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

C:\>set folder
folder=d:\Anwendungsdaten\Fritz!\Faxeingang
Cottonwood
Cottonwood 10.09.2014 um 12:42:21 Uhr
Goto Top
Das entspricht meinem 2. Beispiel (hoffe ich). Das klappt auch nicht (sh. weiter unten).
Cottonwood
Cottonwood 10.09.2014 um 12:46:12 Uhr
Goto Top
Bei mir funktioniert das aber nicht (sh. Beispiel).
colinardo
colinardo 10.09.2014 aktualisiert um 12:50:20 Uhr
Goto Top
schau mal genau hin bitte ...ich verwende kein "delayed expansion" mit den Ausrufezeichen, sondern mit Prozentzeichen aus dem oben bereits erwähnten Grund !!
set "drive=%folder:~0,2%"  
set "pfad=%folder:~2%"