用于检查电池状态变量并在 if 语句中使用它的脚本,是否有任何脚本可以每分钟将 .bat 文件 运行 作为隐藏进程
Script to check battery status variable and use it in if statement, and is there any script to make .bat file run as a hidden process every minute
目前,我正在尝试创建一个脚本文件,如果它检测到笔记本电脑 运行正在使用电池而不是交流电,它将启动其他程序。
前提是我用的是Windows8.1.
我创建了一个 .bat
文件并输入了以下脚本:
@ECHO OFF
REM To Check the battery status, providing that 2 is connected to the AC
WMIC Path Win32_Battery Get BatteryStatus
REM Check the content of battery status variable
IF NOT "%BatteryStatus%"=="2"(
echo laptop started to use its battery )
当我 运行 上面的批处理文件时,它好像没有检测到 BatteryStatus
变量的内容。
谁能指导我找到将电池状态输出到电池状态变量的最佳方法?
另一件事,我需要一个脚本来允许这个蝙蝠 运行 并且每分钟检查一次电池,我该如何实现?
我尝试使用任务调度程序来完成,但问题是最大重现时间为 5 分钟。
有什么想法吗?
提前致谢!
更健壮一点,检查变量是否真的batterystatus
:
for /F "delims== tokens=1,2" %%a in ('WMIC Path Win32_Battery Get BatteryStatus /format:textvaluelist.xsl') do @if "%%a"=="BatteryStatus" call :DoStuff %%b
goto :EOF
:DoStuff
do_thing1 >nul
do_thing2 >nul
do_thing3 >nul
goto :EOF
然后,使用循环继续这个过程:
:LOOP
for /f .....
timeout /t 60
goto :LOOP
好的,这就是我在 :
中的意思
@ECHO OFF
:LOOP
REM To Check the battery status, providing that 2 is connected to the AC
FOR /F "skip=1 tokens=1" %%A IN ('WMIC Path Win32_Battery Get BatteryStatus 2^>^&1') DO SET BatteryStatus=%%A
SET /A BatteryStatus+=0
REM Check the content of battery status variable
IF %BatteryStatus% EQU 2 (
ECHO laptop is running on AC power
) ELSE IF %BatteryStatus% GEQ 1 (
ECHO laptop started to use its battery
) ELSE ECHO unknown battery status
TIMEOUT /T 60 /NOBREAK > nul
GOTO :LOOP
这也具有此 中提到的循环。
我将 2>&1
部分添加到 WMIC
命令以重定向潜在的错误消息,因为它可能 return 像 No Instance(s) Available.
这样的消息。
紧随其后的附加 SET /A
命令可确保变量 %BatteryStatus%
永远不会为空,即使出现上述错误也是如此。还有额外的检查来区分电池上的 运行、交流电源上的 运行 和未知状态下的 运行(前者 IF NOT "%BatteryStatus%"=="2"
可能会在出错时产生误导)。
这就是我如何让它满足我的需求:
@ECHO OFF
:LOOP
REM To Check the battery status, providing that 2 is connected to the AC
for /F "delims== tokens=1,2" %%a in ('WMIC Path Win32_Battery Get BatteryStatus /format:textvaluelist.xsl') do @if "BatteryStatus"=="%%a" call :DoStaff "%%b"
:DoStaff
if %~1 NEQ 2 (
ECHO laptop started to use its battery
)
TIMEOUT /T 60 /NOBREAK > nul
GOTO :LOOP
我希望我能以某种方式隐藏批处理框,但无论如何,谢谢大家的帮助,
非常感谢!
亲切的问候
将此作为对问题的一小部分的潜在答案。您可以通过在 batch
:
中添加 powershell
行来隐藏 window
powershell -window hidden -command ""
请注意,您仍会在启动时看到初始 cmd window 闪烁,但它会立即消失并在后台继续 运行。
目前,我正在尝试创建一个脚本文件,如果它检测到笔记本电脑 运行正在使用电池而不是交流电,它将启动其他程序。
前提是我用的是Windows8.1.
我创建了一个 .bat
文件并输入了以下脚本:
@ECHO OFF
REM To Check the battery status, providing that 2 is connected to the AC
WMIC Path Win32_Battery Get BatteryStatus
REM Check the content of battery status variable
IF NOT "%BatteryStatus%"=="2"(
echo laptop started to use its battery )
当我 运行 上面的批处理文件时,它好像没有检测到 BatteryStatus
变量的内容。
谁能指导我找到将电池状态输出到电池状态变量的最佳方法?
另一件事,我需要一个脚本来允许这个蝙蝠 运行 并且每分钟检查一次电池,我该如何实现?
我尝试使用任务调度程序来完成,但问题是最大重现时间为 5 分钟。
有什么想法吗?
提前致谢!
更健壮一点,检查变量是否真的batterystatus
:
for /F "delims== tokens=1,2" %%a in ('WMIC Path Win32_Battery Get BatteryStatus /format:textvaluelist.xsl') do @if "%%a"=="BatteryStatus" call :DoStuff %%b
goto :EOF
:DoStuff
do_thing1 >nul
do_thing2 >nul
do_thing3 >nul
goto :EOF
然后,使用循环继续这个过程:
:LOOP
for /f .....
timeout /t 60
goto :LOOP
好的,这就是我在
@ECHO OFF
:LOOP
REM To Check the battery status, providing that 2 is connected to the AC
FOR /F "skip=1 tokens=1" %%A IN ('WMIC Path Win32_Battery Get BatteryStatus 2^>^&1') DO SET BatteryStatus=%%A
SET /A BatteryStatus+=0
REM Check the content of battery status variable
IF %BatteryStatus% EQU 2 (
ECHO laptop is running on AC power
) ELSE IF %BatteryStatus% GEQ 1 (
ECHO laptop started to use its battery
) ELSE ECHO unknown battery status
TIMEOUT /T 60 /NOBREAK > nul
GOTO :LOOP
这也具有此
我将 2>&1
部分添加到 WMIC
命令以重定向潜在的错误消息,因为它可能 return 像 No Instance(s) Available.
这样的消息。
紧随其后的附加 SET /A
命令可确保变量 %BatteryStatus%
永远不会为空,即使出现上述错误也是如此。还有额外的检查来区分电池上的 运行、交流电源上的 运行 和未知状态下的 运行(前者 IF NOT "%BatteryStatus%"=="2"
可能会在出错时产生误导)。
这就是我如何让它满足我的需求:
@ECHO OFF
:LOOP
REM To Check the battery status, providing that 2 is connected to the AC
for /F "delims== tokens=1,2" %%a in ('WMIC Path Win32_Battery Get BatteryStatus /format:textvaluelist.xsl') do @if "BatteryStatus"=="%%a" call :DoStaff "%%b"
:DoStaff
if %~1 NEQ 2 (
ECHO laptop started to use its battery
)
TIMEOUT /T 60 /NOBREAK > nul
GOTO :LOOP
我希望我能以某种方式隐藏批处理框,但无论如何,谢谢大家的帮助, 非常感谢!
亲切的问候
将此作为对问题的一小部分的潜在答案。您可以通过在 batch
:
powershell
行来隐藏 window
powershell -window hidden -command ""
请注意,您仍会在启动时看到初始 cmd window 闪烁,但它会立即消失并在后台继续 运行。