自动运行 .bat 文件以检查计算机是否已拔下电源。如果已拔下电源,则终止进程

自动运行 .bat 文件以检查计算机是否已拔下电源。如果已拔下电源,则终止进程

在启动时,我想要一个脚本来检查计算机是否已拔下电源(即使用电池运行)。如果是,我想终止一些进程。

在搜索了超级用户和 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

为什么它不保存数字 2?

如果你在 shell 中运行以下命令cmd

WMIC Path Win32_Battery Get BatteryStatus

输出通常是:

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


F:\test>

如上所示,wmic输出一个额外的空白行。

空白行将%%A是空字符串并且BatteryStatus未定义。

最简单的修复方法是将|输出通过管道传输wmicfindstr /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
)

进一步阅读

相关内容