anmelder
Goto Top

Wmic logicaldisk sucht Laufwerkbuchstabe zu Netzwerkpfad

Hallo,

FOR /f "TOKENS=1* DELIMS==" %%i IN ('wmic logicaldisk WHERE  "CAPTION='e:'" GET PROVIDERNAME /VALUE '" GET DEVICEID /VALUE') DO FOR /f "DELIMS=" %%k in ("%%j") DO SET "Netzwerkname=%%k"   

hat mir "\\fritz.box.fritz.nas" ausgegeben.

FOR /f "TOKENS=1* DELIMS==" %%i IN ('wmic logicaldisk WHERE "PROVIDERNAME='\\fritz.box.fritz.nas'" GET DEVICEID /VALUE') DO FOR /f "DELIMS=" %%k in ("%%j") DO SET "Laufwerkbuchstabe=%%k"  

soll das nun rückgängig machen und E: ausgeben aber ich bekomme den Fehler: Keine Instanzen verfügbar.

Was mache ich hier wieder falsch? Ich kenne den Netzwerknamen und möchte dazu den Laufwerkbuchstaben erhalten.

Content-ID: 353218

Url: https://administrator.de/forum/wmic-logicaldisk-sucht-laufwerkbuchstabe-zu-netzwerkpfad-353218.html

Ausgedruckt am: 12.04.2025 um 15:04 Uhr

rubberman
rubberman 29.10.2017 um 19:20:10 Uhr
Goto Top
Backslashes verdoppeln à la '\\\\fritz.box.fritz.nas', schätze ich mal. Kanns leider gerade nicht testen.

Steffen
anmelder
anmelder 29.10.2017 um 19:36:05 Uhr
Goto Top
Nein, das war es leider nicht. Interessant sind aber die Fehlermeldungen:

4 \\\\fritz.box.fritz.nas = Keine Instanzen verfügbar
3 \\\fritz.box.fritz.nas = Die Anfrage ist ungültig
2 \\fritz.box.fritz.nas = Keine Instanzen verfügbar
5 \\\\\fritz.box.fritz.nas = Die Anfrage ist ungültig
6 \\\\\\fritz.box.fritz.nas = Keine Instanzen verfügbar
em-pie
Lösung em-pie 29.10.2017 aktualisiert um 23:03:00 Uhr
Goto Top
Moin,

spuckt dir das erste Script wirklich nur \\fritz.box.fritz.nas aus oder eher \\fritz.box.fritz.nas\share?

Habe es gerade mal nachgestellt und mit etwas "frickeln" wie folgt erfolgreich direkt im CMD-Fenster umgesetzt:
wmic logicaldisk where "PROVIDERNAME='\\\\myServer.domain.tld\\share'" GET DEVICEID /VALUE  

In deinem obigen Code dann eingebunden wie folgt:
FOR /f "TOKENS=1* DELIMS==" %%i IN ('wmic logicaldisk WHERE "PROVIDERNAME='\\fritz.box.fritz.nas\\share''" GET DEVICEID /VALUE') DO FOR /f "DELIMS=" %%k in ("%%j") DO SET "Laufwerkbuchstabe=%%k"  

Gruß
em-pie
rubberman
Lösung rubberman 29.10.2017 um 21:01:59 Uhr
Goto Top
Alternativ dann vielleicht auch mit LIKE
FOR /f "TOKENS=1* DELIMS==" %%i IN ('wmic logicaldisk WHERE "PROVIDERNAME like '\\\\fritz.box.fritz.nas\\%%'" GET DEVICEID /VALUE') DO FOR /f "DELIMS=" %%k in ("%%j") DO SET "Laufwerkbuchstabe=%%k"  

Steffen
anmelder
anmelder 30.10.2017 um 14:25:33 Uhr
Goto Top
em-pie:
\\fritz.box.fritz.nas ist der fritzinterne Speicher. Die anderen heißen dann \\fritz.box.fritz.nas\Onlinespeicher u.s.w.
Das Script meldet bei mir bei beiden Speichern: Keine Instanzen verfügbar.

rubberman:
Like meldet ebenfalls; Keine Instanzen verfügbar.

Kann es sein daß die Home Version nur einen eingeschränkten wmic Befehl mitbringt?

Ich habe jetzt das Problem so umgangen:

echo off

SETLOCAL ENABLEDELAYEDEXPANSION

SET Suchbuchstabe=p

REM Sucht Netzwerkname zum Laufwerkbuchstaben
FOR /f "TOKENS=1* DELIMS==" %%i IN ('wmic logicaldisk WHERE "CAPTION='%Suchbuchstabe%:'" GET PROVIDERNAME /VALUE') DO FOR /f "DELIMS=" %%k in ("%%j") DO SET "Netzwerkname2=%%k"  

SET Netzwerksuche=!Netzwerkname2!

REM Sucht Laufwerkbuchstaben zum Netzwerknamen

FOR %%a IN (C D E F G H I J K L M N O P Q R S T U V W X Y Z A B 1 2 3 4 5 6 7 8 9 0) DO (

IF EXIST %%a:\NUL (
 FOR /f "TOKENS=1* DELIMS==" %%i IN ('wmic logicaldisk WHERE "CAPTION='%%a:'" GET PROVIDERNAME /VALUE')DO (  
  FOR /f "DELIMS=" %%k in ("%%j") DO (  
   SET "Netzwerkname=%%k"   
   IF !Netzwerksuche! == !Netzwerkname! SET Buchstabe=%%a
   )
  )
 )
)

echo Buchstabe: !Netzwerkname2! hat Buchstabe: !Buchstabe!

Der Code ist langsam aber das Ergebnis stimmt. Wenn jemand noch eine schnellere Lösung findet ist das schön aber ihr müßt keine Zeit damit verschwenden.
rubberman
rubberman 30.10.2017 aktualisiert um 14:52:43 Uhr
Goto Top
Zitat von @anmelder:

\\fritz.box.fritz.nas ist der fritzinterne Speicher.
Und das ist auch ganz sicher nicht \\fritz.box\fritz.nas ? Zumindest komme ich mit diesem Pfad auf das NAS meiner Fritte. Habs lediglich nicht als Netzlaufwerk eingerichtet ...

Kann es sein daß die Home Version nur einen eingeschränkten wmic Befehl mitbringt?
Nope.

Steffen
em-pie
em-pie 30.10.2017 um 14:57:52 Uhr
Goto Top
Ich frage mich gerade, ob man Windows überhaupt zum einem Netzlaufwerk mit einem Buchstaben bewegen kann, wenn man in der gesamten Pfadangabe keinen Share angibt.

EIn net user * \\domain.tld mochte WIndows jedenfalls gerade nicht so wirklich....


Was ich aber gerade mal getestet habe (auf Basis von rubberman's obige Beispiel mit dem Like):
wmic logicaldisk where "PROVIDERNAME like '\\\\%domain.tld\\%%'" GET Volumename /VALUE  

Hier bekomme ich ein Ergebnis...
anmelder
anmelder 30.10.2017 um 16:10:06 Uhr
Goto Top
rubberman:

Ja richtig, \\fritz.box\fritz.nas ist richtig. Aber das ändert nichts an den Fehlermeldungen, ich habe alle Beispiele nochmals getestet

,
em-pie:

Das entspräche dann ja
wmic logicaldisk where "PROVIDERNAME like '\\\\%fritz.box\fritz.nas\\%%'" GET Volumename /VALUE  
aber alles was ich eingebe ist ungültig
em-pie
em-pie 30.10.2017 um 16:22:02 Uhr
Goto Top
Nee... du musst mittendrin noch ein Doppelbackslash setzen:

wmic logicaldisk where "PROVIDERNAME like '\\\\%fritz.box\\fritz.nas%'" GET Volumename /VALUE  

So sollte es passen
rubberman
rubberman 30.10.2017 um 16:49:19 Uhr
Goto Top
ACHTUNG in Batchscripts sind Prozentzeichen zu verdoppeln! Ansonsten versucht die CMD Variablen zu expandieren wo keine sind. Ich denke auch nicht dass du einen Platzhalter (Prozentzeichen) am Anfang brauchst.

Steffen
em-pie
em-pie 30.10.2017 um 17:16:44 Uhr
Goto Top
Ahh.. hast recht, mir sind die doppelten Prozentzeichen untergegangen...
Und jopp, die vorderen kannst du "ignorieren", hatte die noch von "anderen" Spielereien drin, weil ich bei den Tests mal wissen wollte, welche SHares er bei mir so listet ^^

wmic logicaldisk where "PROVIDERNAME like '\\\\fritz.box\\fritz.nas%%'" GET Volumename /VALUE

Sollte also gelingen (innerhalb deines gesamten Batchkonstrukts).
anmelder
anmelder 30.10.2017 aktualisiert um 18:48:41 Uhr
Goto Top
FOR /f "TOKENS=1* DELIMS==" %%i IN ('wmic logicaldisk WHERE "PROVIDERNAME like '\\\\%%fritz.box\\fritz.nas\\Onlinespeicher%%'" GET CAPTION /VALUE') DO FOR /f "DELIMS=" %%k in ("%%j") DO SET "Netzwerkname2=%%k"   
echo !Netzwerkname2!

gibt den richtigen Wert aus, auch in der Konsole, weil der Pfad eindeutig ist.

Wenn ich in der Konsole
wmic logicaldisk WHERE "PROVIDERNAME like '\\\\%%fritz.box\\fritz.nas%%'" GET CAPTION /VALUE  
eingebe bekomme ich 3 Laufwerkbuchstaben. Die Batch wählt davon den letzten und das ist der falsche.

Vermutlich liegt das am like, das soweit ich weiß in diesem Zusammenhang ähnlich heißt, es werden alle Laufwerkbuchstaben gefunden die mit \\fritz.box\fritz.nas beginnen. Wenn ich das like entferne kommt wieder der Fehler: Die Anfrage ist ungültig.

FOR /f "TOKENS=1* DELIMS==" %%i IN ('wmic logicaldisk WHERE "PROVIDERNAME '\\\\%%fritz.box\\fritz.nas\\%%'" GET CAPTION /VALUE') DO FOR /f "DELIMS=" %%k in ("%%j") DO SET "Netzwerkname2=%%k"   
echo !Netzwerkname2!

Es scheint also so zu sein daß meine Lösung oben die bessere ist, da diese den Laufwerkbuchstaben für \\fritz.box\fritz.nas richtig wiedergibt.
em-pie
em-pie 30.10.2017 um 19:49:57 Uhr
Goto Top
Lass mal bei deiner Abfrage das “\\%%” am Ende weg:
\\\\fritz.box\\fritz.nas

Denn mit den letzten beiden Backslashes kann er nichts finden, wel danach ja nichts mehr kommt...
rubberman
rubberman 30.10.2017 aktualisiert um 21:13:20 Uhr
Goto Top
Dann wären wir auch wieder bei = und nicht mehr bei LIKE.
BTW: Das widerspricht der Aussage, dass mit \\Onlinespeicher am Ende der richtige Laufwerksbuchstabe ausgespuckt wird.

Vermutlich liegt das am like, das soweit ich weiß in diesem Zusammenhang ähnlich heißt
https://msdn.microsoft.com/en-us/library/aa392263(v=vs.85).aspx
Mit LIKE werden Prozentzeichen als Platzhalter/Wildcards verwendet. Heißt, dort wo die Prozentzeichen auftauchen, darf "irgendwas" in der Realität stehen. Das ist so ähnlich zu verstehen, wie das * beim DIR Kommando oder in FOR Schleifen. Ein
DIR *.txt
würde sämtliche Dateien mit Endung .txt auflisten.

Steffen
anmelder
anmelder 31.10.2017 aktualisiert um 09:18:53 Uhr
Goto Top
Lange hat es gedauert, aber es läuft. face-smile

Danke an alle.

echo off 

SETLOCAL ENABLEDELAYEDEXPANSION 

SET Suchlaufwerk=e

REM Sucht Netzwerkname zum Laufwerkbuchstaben 

FOR /f "TOKENS=1* DELIMS==" %%i IN ('wmic logicaldisk WHERE "CAPTION='!Suchlaufwerk!:'" GET PROVIDERNAME /VALUE') DO FOR /f "DELIMS=" %%k in ("%%j") DO SET "Netzwerkname=%%k"   


REM Sucht Laufwerkbuchstaben zum Netzwerknamen

SET Suchnetzwerk=!Netzwerkname:\=\\!

FOR /f "TOKENS=1* DELIMS==" %%i IN ('wmic logicaldisk WHERE "PROVIDERNAME like '!Suchnetzwerk!'" GET CAPTION /VALUE') DO FOR /f "DELIMS=" %%k in ("%%j") DO SET "Buchstabe=%%k"    

echo Netzwerk: !Netzwerkname! hat Buchstabe: !Buchstabe!
pause