Abfrage des Laufwerksnamen per Batch
Hallo zusammen
Ich habe ein Skript was mir alle Laufwerksbuchstaben durchläuft und mir von den Laufwerken den Namen ausgibt.
Nun möchte ich, wenn das Laufwerk einen bestimmten Namen hat einen Befehl ausführen.
Leider bekomme ich bei der "if !LWA! == %LWA01%" keine Übereinstimmung, obwohl es das Laufwerk mit dem
Namen "Windows_os" gibt. Kann mir einer sagen warum die IF abfrage nicht greift?
Ich habe ein Skript was mir alle Laufwerksbuchstaben durchläuft und mir von den Laufwerken den Namen ausgibt.
Nun möchte ich, wenn das Laufwerk einen bestimmten Namen hat einen Befehl ausführen.
Leider bekomme ich bei der "if !LWA! == %LWA01%" keine Übereinstimmung, obwohl es das Laufwerk mit dem
Namen "Windows_os" gibt. Kann mir einer sagen warum die IF abfrage nicht greift?
@echo off
SETLOCAL EnableDelayedExpansion
cls
set LWA01=Windows_os
FOR %%i IN (C D E F G H) DO (
for /f "tokens=2 delims==" %%A in ('wmic volume where DriveLetter^="%%i:" get Label /value') do (
set LWA=%%A
echo !LWA!
if !LWA! == %LWA01% (
echo hallo sascha
)
)
)
pause
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 372713
Url: https://administrator.de/contentid/372713
Ausgedruckt am: 26.11.2024 um 01:11 Uhr
12 Kommentare
Neuester Kommentar
Hallo,
Da würde ich erstmal ein REM davorschreiben oder ein @echo On hintuen.
Gruß,
Peter
Da würde ich erstmal ein REM davorschreiben oder ein @echo On hintuen.
echo !LWA!
Und was steht dann dort? Windows_os oder sind dort die Buchstaben/Zahlen/Zeichen (und dazu zählen auch Leerzeichen) anders?Gruß,
Peter
Hallo,
Gruß,
Peter
Zitat von @sascha46:
In der Variable !LWA! stehen immer die Laufwerksnamen, das funktioniert also die Variable !LWA!
Was genau steht in der Variable drin? Poste das mal hier (von einer Kommandzeile aus).In der Variable !LWA! stehen immer die Laufwerksnamen, das funktioniert also die Variable !LWA!
Aber die IF abfrage funktioniert nicht, ich finde den Fehler leider nicht.
Dann passen deine beiden Variablen nicht zusammen.Gruß,
Peter
Hallo Sascha46,
ich benutze eine ein ähnliches Skript. Vielleicht hilft dir das weiter
Lg
Zendara
ich benutze eine ein ähnliches Skript. Vielleicht hilft dir das weiter
@echo off & setlocal enabledelayedexpansion
set "find_Drive=NA"
for %%b in (c d e f g h i j k l m n o p q r s t) do (
for /f "tokens=6 delims= " %%a in ('vol %%b: 2^>^&0') do (
if exist %%b:\* (
if /I "%%a" == "Windows_os" (
set "find_Drive=%%b"
)
)
)
)
if not %find_Drive%==NA ( echo Laufwerk gefunden LW: %find_Drive%:\ ) else ( echo Laufwerk nicht gefunden. )
pause
Lg
Zendara
Zwei Dinge:
1. WMIC hat einen Bug, der existiert solange es WMIC gibt. Am Zeilenende bleibt ein Carriage Return Zeichen stehen, das du mit einer zusätzlichen Schleife eliminieren kannst.
2. Vergleiche die Werte in Anführungszeichen eingefasst und lasse die Leerzeichen um == weg.
ungetestet
Natürlich brauchst du die Variable LWA eigentlich nicht und kanns gleich mit %%B arbeiten.
Steffen
1. WMIC hat einen Bug, der existiert solange es WMIC gibt. Am Zeilenende bleibt ein Carriage Return Zeichen stehen, das du mit einer zusätzlichen Schleife eliminieren kannst.
2. Vergleiche die Werte in Anführungszeichen eingefasst und lasse die Leerzeichen um == weg.
ungetestet
@echo off
SETLOCAL EnableDelayedExpansion
cls
set "LWA01=System"
FOR %%i IN (C D E F G H) DO (
for /f "tokens=2 delims==" %%A in ('wmic volume where DriveLetter^="%%i:" get Label /value') do for /f "delims=" %%B in ("%%A") do (
set "LWA=%%B"
echo !LWA!
if "!LWA!"=="%LWA01%" (
echo hallo sascha
)
)
)
pause
Steffen
Wieso werden die Leerzeichen bei == entfernt?
Damit sie nicht mit verglichen werden. Batch ist da etwas eigen im Vergleich zu anderen Sprachen. Bei Zuweisungen ist das genauso. Einset "a = b"
würde eine Variable %a % (beachte das Leerzeichen) erzeugen. Auch der Wert b hätte dann ein vorangestelltes Leerzeichen.
und warum sind die Variablen auch zwischen Anführungszeichen?
Das ist eher Best Practice. Leere Strings, Leerzeichen oder Sonderzeichen (z.B. &<>|) erzeugen einen Syntaxfehler, wenn die zu vergleichenden Strings nicht in Anführungszeichen gesetzt sind. Bzgl. Sonderzeichen gibt es auch hier wieder die Analogie zu Zuweisungen (falls du dich über die Anführungszeichen im obigen Beispiel gewundert haben solltest).Steffen
Eigentlich besteht keine Notwendigkeit die Laufwerksbuchstaben vorzugben,
Wmic kennt die doch.
Gruß
LotPings
Wmic kennt die doch.
@Echo off
For /f "tokens=1,2" %%A in (
'wmic logicaldisk get DeviceID^,VolumeName'
) do For %%C in (%%B) do If /i "%%C"=="Windows_os" echo Hallo sascha (%%A=%%C)
Gruß
LotPings