2016-08-07 24 views
1

Ich brauche eine um „sonst kein USB-Erkennung Echo“ in diese .bat (nicht hinzufügen „wenn %% l NEQ 2“)sonst in eine Schleife erkennen Laufwerk

for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (
if %%l equ 2 (
echo USB detect in %%i 
     ) 
     ) 

In einfachen Worten: wenn USB erkannt, dann "echo OK". Aber wenn das USB nicht erkannt wird, dann "echo Nein" und beenden. Dank

Gelöst vonTim

Wichtiger Hinweis:

Dieses Skript (von Stephan) meiner Meinung nach, ist viel höher Laufwerke zu erkennen

@echo off 
setlocal enabledelayedexpansion 
REM get removable loaded drives: 
for /f %%a in ('"wmic logicaldisk where (drivetype=2 and size is not null) get caption,size 2>nul|find ":""') do set usb=!usb! %%a 
REM show a overview: 
if defined usb (echo removable drives found in: %usb%) else echo no removable drive found 
REM show them one-by-one: 
for %%a in (%usb%) do echo removable drive found in %%a 
+1

'sonst So fügen (echo keine USB-Erkennung)' zwischen den beiden Klammern. CMD hat eine "IF ELSE" -Struktur: http://ss64.com/nt/if.html – Tim

+0

aber in welchem ​​Teil des Skripts? genauer gesagt –

+0

Zwischen Ihren beiden nahen Klammern: ')' Die Syntax ist 'FOR .... (IF %% l equ 2 (Echo USB erkannt in %% i) ELSE (Echo Kein USB erkannt))' – Tim

Antwort

0

Ihre Frage wurde das Hinzufügen einer ELSE Klausel zu Ihrer IF Aussage. Ich empfehle, ELSE zwischen Ihren zwei nahen Klammern hinzuzufügen. Dieser Code macht genau das:

@echo off 
for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (
    if %%l equ 2 (echo USB detect in %%i) ELSE (echo No USB Detect) 
) 

Das ist meine Ausgabe ohne USB-Laufwerke angeschlossen:

C:\Users\tim\Documents\Scripting Tools>usbdetect.bat 
No USB Detect 
No USB Detect 
No USB Detect 

Das ist mein Ausgang mit einem thumbdrive gesteckt:

C:\Users\tim\Documents\Scripting Tools>usbdetect.bat 
No USB Detect 
No USB Detect 
USB detect in D: 
No USB Detect 

Hier Mein Ergebnis des von Ihnen verwendeten WMIC-Befehls:

C:\Users\tim\Documents\Scripting Tools>wmic logicaldisk get caption,description,drivetype 
Caption Description  DriveType 
C:  Local Fixed Disk 3 
D:  Removable Disk 2 

Sie könnten es Echos no USB Detect 3 mal bemerken. Das ist richtig, weil die FOR-Schleife, die Sie erstellt haben, jede Ausgabezeile durchläuft. WMIC gibt eine Zeile mit den Headern (Caption, Description und DriveType), eine Zeile für jedes Laufwerk (und C: ist DriveType 2) und dann eine leere Zeile aus.

Ihre letzte Zeile, In simple words: if USB detected, then "echo OK". But if it does not detect the USB, then "echo No" and exit. Scheint implizieren, dass Sie nur eine einfache Installierte/nicht installiert, nicht ein Ja/Nein für jede Zeile der Ausgabe von Ihrer WMIC-Abfrage wollen. Wenn das der Fall ist, brauchen Sie (oder wollen) kein ELSE. Versuchen Sie stattdessen:

@echo off 
for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (
    if %%l equ 2 (
    echo USB detect in %%i 
    goto RestOfBatch 
) 
) 
echo USB not detected 
:RestOfBatch 

ohne USB-Laufwerk eingesteckt:

C:\Users\tim\Documents\Scripting Tools>usbdetect.bat 
USB not detected 

Und mit einem USB-Laufwerk eingesteckt:

C:\Users\tim\Documents\Scripting Tools>usbdetect.bat 
USB detect in D: 

Wenn beides nicht das gewünschte Ergebnis, bitte Definieren Sie Ihr Problem klarer. http://ss64.com/nt/ enthält eine umfassende Liste von Batch-Befehlen und deren Syntax. Sie können auch /? am Ende eines Befehls hinzufügen, um Beispiele zu erhalten.Beispiel: IF /?

+0

funktioniert dank Tim –

0

Dieser Code funktioniert für mich. Speichern Sie es in test.bat und führen Sie von offener Cmd Prompt. Er druckt nur Datenträger zugehörige Informationen, keinen Müll:

@echo off 
setlocal enabledelayedexpansion 
for /F "usebackq tokens=* skip=1" %%i in (`wmic logicaldisk get caption^,description^,drivetype 2^>NUL`) do (set "dsk=%%i" 
    if "!dsk:~-12,1!" equ "2" (echo USB disk detected in !dsk:~0,2! 
    ) else if "!dsk:~-12,1!" gtr "2" (echo No USB disk detected in !dsk:~0,2!)) 
exit /b 
1

wmic mehr Leistung hat als Sie denken:

@echo off 
setlocal enabledelayedexpansion 
REM get removable loaded drives: 
for /f %%a in ('"wmic logicaldisk where (drivetype=2 and size is not null) get caption,size 2>nul|find ":""') do set usb=!usb! %%a 
REM show a overview: 
if defined usb (echo removable drives found in: %usb%) else echo no removable drive found 
REM show them one-by-one: 
for %%a in (%usb%) do echo removable drive found in %%a 
+0

Ich dachte über die Integration 'WHERE' darin, nur USB-Laufwerke zu greifen, aber ich war mir nicht sicher, ob das OP auflisten musste Jede Fahrt aus einem bestimmten Grund. Dies ist eine ausgezeichnete Lösung, die die Leistungsfähigkeit von WMIC und WQL demonstriert ('is not null' ... brilliant! Daran hätte ich nicht gedacht.) – Tim

+0

Dieses Skript ist sehr gut. Ich werde versuchen zu sehen, ob ich das aktuelle ersetzen kann. Vielen Dank –

+0

Es ist besser, Sperre nach: sonst (Echo kein Wechsellaufwerk gefunden) –