1

При запуске я хочу, чтобы скрипт проверял, отключен ли компьютер от сети (т.е. работает ли он от батареи). Если так, я хочу убить несколько процессов.

После очистки superuser и stackoverflow, я зашел так далеко:

@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
)

С ECHO ON я получаю:

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

Почему не сохранить номер 2?

1 ответ1

0

Почему не сохранить номер 2?

Если вы выполните следующую команду в командной оболочке cmd :

WMIC Path Win32_Battery Get BatteryStatus

Вывод обычно будет:

F:\test>WMIC Path Win32_Battery Get BatteryStatus
BatteryStatus
2


F:\test>

Как показано выше, wmic выводит дополнительную пустую строку.

Для пустых строк %%A будет пустой строкой, а BatteryStatus будет неопределенным.

Самый простой способ исправить это | вывод wmic для findstr /r /v "^$" который удалит все пустые строки.

Исправленный пакетный файл (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
)

Выход с включенным echo :

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
)

Дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .