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

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

Printed on: April 20, 2024 at 07:04 o'clock

Member: rubberman
rubberman Oct 29, 2017 at 18:20:10 (UTC)
Goto Top
Backslashes verdoppeln à la '\\\\fritz.box.fritz.nas', schätze ich mal. Kanns leider gerade nicht testen.

Steffen
Member: anmelder
anmelder Oct 29, 2017 at 18:36:05 (UTC)
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
Member: em-pie
Solution em-pie Oct 29, 2017 updated at 22:03:00 (UTC)
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
Member: rubberman
Solution rubberman Oct 29, 2017 at 20:01:59 (UTC)
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
Member: anmelder
anmelder Oct 30, 2017 at 13:25:33 (UTC)
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.
Member: rubberman
rubberman Oct 30, 2017 updated at 13:52:43 (UTC)
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
Member: em-pie
em-pie Oct 30, 2017 at 13:57:52 (UTC)
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...
Member: anmelder
anmelder Oct 30, 2017 at 15:10:06 (UTC)
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
Member: em-pie
em-pie Oct 30, 2017 at 15:22:02 (UTC)
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
Member: rubberman
rubberman Oct 30, 2017 at 15:49:19 (UTC)
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
Member: em-pie
em-pie Oct 30, 2017 at 16:16:44 (UTC)
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).
Member: anmelder
anmelder Oct 30, 2017 updated at 17:48:41 (UTC)
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.
Member: em-pie
em-pie Oct 30, 2017 at 18:49:57 (UTC)
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...
Member: rubberman
rubberman Oct 30, 2017 updated at 20:13:20 (UTC)
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
Member: anmelder
anmelder Oct 31, 2017 updated at 08:18:53 (UTC)
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