Por que não salva o número 2?
Se você executar o seguinte comando em um cmd shell:
WMIC Path Win32_Battery Get BatteryStatus
A saída normalmente será:
F:\test>WMIC Path Win32_Battery Get BatteryStatus
BatteryStatus
2
F:\test>
Como mostra a saída acima, wmic produz uma linha em branco adicional.
Para linhas em branco, %%A será uma string vazia e BatteryStatus será indefinido.
A correção mais fácil é canalizar | da saída de wmic para findstr /r /v "^$" , o que tira todas as linhas em branco.
Arquivo em lote corrigido (test.cmd):
@ECHO OFF
FOR /F "skip=1 tokens=1" %%A in ('WMIC Path Win32_Battery Get BatteryStatus ^| findstr /r /v "^$"') DO SET BatteryStatus=%%A
IF "%BatteryStatus%"=="1" (
taskkill /im DMT.exe
taskkill /im AudioSwitcher.exe
)
Saída com echo ativada:
F:\test>test
F:\test>rem @ECHO OFF
F:\test>FOR /F "skip=1 tokens=1" %A in ('WMIC Path Win32_Battery Get BatteryStatus | findstr /r /v "^$"') DO SET BatteryStatus=%A
F:\test>SET BatteryStatus=2
F:\test>IF "2" == "1" (
taskkill /im DMT.exe
taskkill /im AudioSwitcher.exe
)
Leitura Adicional
- Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
- findstr - Pesquise strings em arquivos.
- para / f - Comando Loop contra os resultados de outro comando.
- wmic - Comando de instrumentação de gerenciamento do Windows.