Batch file 使用wmic path SYSTEM 32估计的充电维护结果作为变量

Batch file 使用wmic path SYSTEM 32估计的充电维护结果作为变量,batch-file,path,wmic,batterylevel,system32,Batch File,Path,Wmic,Batterylevel,System32,在批处理文件中,我正在运行以下命令: wmic path system32 estimatedchargeremaining 我想要实现的是使用这个结果执行另一个依赖于结果的命令。例如,如果输出为: estimatedchargeremaining 75 我想使用75…而不是错误级别0 因此,之后要在那里运行的命令将大致如下: if estimatedchargeremaining LEQ 15 *NEW COMMAND* if estimatedchargeremining

在批处理文件中,我正在运行以下命令:

wmic path system32 estimatedchargeremaining
我想要实现的是使用这个结果执行另一个依赖于结果的命令。例如,如果输出为:

estimatedchargeremaining 
75
我想使用75…而不是错误级别0

因此,之后要在那里运行的命令将大致如下:

    if estimatedchargeremaining LEQ 15 
*NEW COMMAND*

if estimatedchargeremining GTR 99
*NEW COMMAND*
但是,由于返回的值不满足这两个条件,因此不会执行任何命令

我希望这足够清楚。不幸的是,由于我现在在另一台电脑上,我无法向你展示我已经拥有的东西。但如果需要,可以在以后提供

干杯,伙计们

以下是格式化代码:

@echo ON 
setlocal ENABLEDELAYEDEXPANSION 
for /f "tokens=2 delims==" %%a in ( 
  'wmic path win32_battery estimatedchargeremaining /value^|find "="' ) do ( 
    if %%a LEQ 15 echo DEVCON ENABLE "@ACPI\ACPI0003\2&DABA3FF&2" GOTO END 
    if %%a GTR 99 echo DEVCON DISABLE "@ACPI\ACPI0003\2&DABA3FF&2" GOTO END 
) 
:end
PAUSE
这是我现在尝试使用的代码,建议如下:

    @echo ON
cd c:/windows/system32
setlocal enableextensions

for /f "tokens=2 delims==" %%a in (
  'wmic path win32_battery get estimatedchargeremaining /value^|find "="'
) do (
  if %%a LEQ 15 (GOTO :ENABLE) else goto :DISABLE0
:DISABLE0
  if %%a GEQ 99 (GOTO :DISABLE)
)

:ENABLE
DEVCON ENABLE "@ACPI\ACPI0003\2&DABA3FF&2" 

:DISABLE
DEVCON DISABLE "@ACPI\ACPI0003\2&DABA3FF&2" 


:END
PAUSE
当我执行批处理文件时,会发生以下情况:

C:\Users\Aaron\Desktop>cd c:/windows/system32

c:\Windows\System32>setlocal enableextensions

c:\Windows\System32>for /F "tokens=2 delims==" %a in ('wmic path win32_battery g et estimatedchargeremaining /value|find "="') do ( if %a LEQ 15 (GOTO :ENABLE )  else goto :DISABLE0  if %a GEQ 99 (GOTO :DISABLE ) )

c:\Windows\System32>(  LEQ 15 (GOTO :ENABLE )  else goto :DISABLE0  GEQ 99 (GOTO :DISABLE ) )

c:\Windows\System32>DEVCON ENABLE "@ACPI\ACPI0003\2&DABA3FF&2" ACPI\ACPI0003\2&DABA3FF&2                                   : Enabled 1 device(s) enabled.

c:\Windows\System32>DEVCON DISABLE "@ACPI\ACPI0003\2&DABA3FF&2" ACPI\ACPI0003\2&DABA3FF&2                                   : Disabled 1 device(s) disabled.

c:\Windows\System32>PAUSE Press any key to continue . . .

我不明白为什么“GOTO”被忽略,而这两个命令都被执行,从而相互抵消?

试试这个。我这里没有笔记本电脑可供测试,但它应该很近

@echo off
setlocal

for /f "tokens=2 delims==" %%a in (
  'wmic path win32_battery get estimatedchargeremaining /value^|find "="'
) do (
  if %%a LEQ 15 echo do something
  if %%a GTR 99 echo do something else
)

谢谢你的回复,马特。我使用了你的建议如下@echo ON setlocal ENABLEDELAYEDEXPANSION for/f“tokens=2 delims==”%%a in('wmic path win32_battery EstimatedChargeMaining/value^ find“=”)do(如果%%a LEQ 15 echo DEVCON ENABLE”@ACPI\ACPI0003\2&DABA3FF&2“转到结束,如果%%a GTR 99 echo DEVCON DISABLE”@ACPI\ACPI0003\2&DABA3FF&2“转到结束):结束暂停我得到的只是“无效动词“最后?PS….对格式很抱歉….我在接下来的4个小时内无法以任何其他方式发布它??我编辑了您的问题,将您发布的修改代码包含在您的评论中。这样更容易阅读。无效动词是wmic错误。如果只运行
wmic path win32\u battery get
,您会得到什么?您可以随时编辑问题以添加新的相关信息。越具体越好。嗨,别介意无效动词,我把它分类了。然而……我现在正在使用这个@echo ON cd c:/windows/system32 setlocal ENABLEDELAYEDEXPANSION for/f“令牌=2 delims==”%%a in('wmic path win32_battery get EstimatedChargeMaining/value^ find“=”)do(如果%%a LEQ 15 GOTO ENABLE如果%%a GEQ 99 GOTO DISABLE):启用DEVCON启用“@ACPI\ACPI0003\2&DABA3FF&2”:禁用DEVCON禁用DEVCON禁用“@ACPI\ACPI0003\2&DABA3FF&2”:END PAUSE但当我执行批处理文件时,启用和禁用命令都在执行,因此相互抵消?