Search code examples
batch-filecmdwmiwmic

WMIC return No Instance(s) Available when run directly .cmd file


I am trying to query WMIC in the for loop. When I run the query command in cmd.exe

WMIC PATH Win32_DiskPartition WHERE (DeviceID="Disk #0, Partition #1") GET Type /value

result is good. But I run query.cmd, it show No Instance(s) Available.

https://abload.de/img/ooo6vkr6.png

@ECHO OFF
SET "InputFile=C:\Users\NIMDA\AppData\Local\Temp\aa.txt"
IF EXIST "%InputFile%" (DEL /f /q "%InputFile%")
SETLOCAL EnableExtensions EnableDelayedExpansion
FOR /F "delims=" %%G IN ('"WMIC PATH Win32_DiskPartition WHERE (DeviceID="Disk #0, Partition #1") GET Type /value"') DO (
    FOR /F "tokens=*" %%H IN ("%%G") DO (
        CALL ECHO %%H>> "%InputFile%"
    )
)
ENDLOCAL
pause

How to fix this ?.


Solution

  • Here are a couple of examples which do it in different ways!

    Using Find:

    @Echo Off
    Set "InputFile=%TEMP%\aa.txt"
    For /F Tokens^=4* %%A In ('
        "WMIC Partition Where "DeviceID Like 'Disk #0%%'" Get DeviceID,Type 2>NUL|Find "Partition #1""
    ')Do @For /F Tokens^=* %%A In ("%%B")Do >>"%InputFile%" Echo Type=%%A
    

    Using Like:

    @Echo Off
    Set "InputFile=%TEMP%\aa.txt"
    For /F Tokens^=* %%A In ('
        "WMIC Partition Where "DeviceID Like 'Disk #0%%' And DeviceID Like '%%Partition #1'" Get Type /Value 2>NUL"
    ')Do @For /F Tokens^=* %%B In ("%%A")Do >>"%InputFile%" Echo %%B