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-Key: 248716

Url: https://administrator.de/contentid/248716

Printed on: April 18, 2024 at 15:04 o'clock

Member: DonMatze
DonMatze Sep 10, 2014 at 01:04:55 (UTC)
Goto Top
Moin,

bekommst du eine Fehlermeldung, o.ä.?


Viele Grüße
Matze
Member: falscher-sperrstatus
falscher-sperrstatus Sep 10, 2014 at 04:27:48 (UTC)
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)
Member: colinardo
colinardo Sep 10, 2014 updated at 06:11:09 (UTC)
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
Member: Cottonwood
Cottonwood Sep 10, 2014 updated at 09:39:46 (UTC)
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.
Member: Cottonwood
Cottonwood Sep 10, 2014 updated at 10:38:56 (UTC)
Goto Top
@certifiedit.net:
Die Syntax des Befehls ist nicht das Problem.
Member: Cottonwood
Cottonwood Sep 10, 2014 at 09:37:50 (UTC)
Goto Top
Danke für deinen konstruktiven Vorschlag. Damit sollte es gehen.

Ich möchte aber auch das Problem verstehen.
Member: colinardo
colinardo Sep 10, 2014 updated at 09:49:05 (UTC)
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%"  
Member: Cottonwood
Cottonwood Sep 10, 2014 at 10:21:07 (UTC)
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
Member: Cottonwood
Cottonwood Sep 10, 2014 at 10:28:05 (UTC)
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
Member: Cottonwood
Cottonwood Sep 10, 2014 updated at 10:31:03 (UTC)
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
Member: colinardo
colinardo Sep 10, 2014 updated at 10:34:33 (UTC)
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
Member: Cottonwood
Cottonwood Sep 10, 2014 at 10:36:56 (UTC)
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
Member: Cottonwood
Cottonwood Sep 10, 2014 at 10:42:21 (UTC)
Goto Top
Das entspricht meinem 2. Beispiel (hoffe ich). Das klappt auch nicht (sh. weiter unten).
Member: Cottonwood
Cottonwood Sep 10, 2014 at 10:46:12 (UTC)
Goto Top
Bei mir funktioniert das aber nicht (sh. Beispiel).
Member: colinardo
colinardo Sep 10, 2014 updated at 10:50:20 (UTC)
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%"