Autorun .bat-file para verificar se o computador está desconectado. Em caso afirmativo, mate processos

1

Na inicialização, quero um script para verificar se o computador está desconectado (ou seja, funcionando com bateria). Se assim for, quero matar alguns processos.

Depois de vasculhar o superusuário e o stackoverflow, cheguei até aqui:

@ECHO OFF
FOR /F "skip=1 tokens=1" %%A in ('WMIC Path Win32_Battery Get   BatteryStatus') DO SET BatteryStatus=%%A
IF "%BatteryStatus%"=="1" (
taskkill /im DMT.exe
taskkill /im AudioSwitcher.exe
)

Com o ECHO ON, recebo:

>SET BatteryStatus=2
>SET BatteryStatus=
>IF "" == "1"

Por que não salva o número 2?

    
por Sinatra 14.09.2016 / 20:37

1 resposta

0

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

por 14.09.2016 / 22:51