在启动时,我想要一个脚本来检查计算机是否已拔下电源(即使用电池运行)。如果是,我想终止一些进程。
在搜索了超级用户和 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
未定义。
最简单的修复方法是将|
输出通过管道传输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
)
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 查找字符串- 在文件中搜索字符串。
- 对于/f- 循环命令以执行另一个命令的结果。
- 西米克- Windows 管理规范命令。