.bat 脚本输出比较

.bat 脚本输出比较

我正在尝试使用 .bat 文件调整 Windows 10 上的电源/休眠设置。我发现您可以使用 轻松导入电源方案,powercfg -import但是问题是尝试将电源方案设置为活动方案。但是,为了使用powercfg -setactive GUID,我需要知道 GUID 才能将其设置为活动方案。但是,GUID 会根据计算机的不同而变化。

以下是我用来提取输出powercfg /L并将其放入变量的内容:

SETLOCAL ENABLEDELAYEDEXPANSION
SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (`powercfg.exe /L`) DO (
  SET var!count!=%%F
  SET /a count=!count!+1
)
ECHO %var1%
ECHO %var2%
ECHO %var3%
ENDLOCAL

我无法将 GUID 放入变量中,然后将其放入 set active 命令中。我不确定如何提取特定的单词或短语。如能得到任何帮助,我将不胜感激。

答案1

我如何从输出中提取所有 GUID powercfg /l

使用以下批处理文件:

@echo off
Setlocal EnableDelayedExpansion
set _count=0
for /f "tokens=*" %%f in ('powercfg.exe /L ^| findstr GUID') do (
  set /a _count+=1
  set _output=%%f
  for /f "tokens=4" %%g in ('echo !_output!') do (
    set _guid[!_count!]=%%g
    )
  )
for /l %%f in (1, 1, %_count%) do (
  echo GUID %%f = !_guid[%%f]!
  )
endlocal

笔记:

  • 用于findstr查找包含 GUID 的行
  • 如果你想按名称查找特定方案,则替换findstr GUIDfindstr %1,然后运行test schemename
  • GUID 是第四个标记,使用另一个从输出中提取它for /f
  • usebackq如果你使用,则不需要'
  • 用于for /l循环遍历已保存的 GUID

例子:

F:\test>powercfg /l

Existing Power Schemes (* Active)
-----------------------------------
Power Scheme GUID: 381b4222-f694-41f0-9685-ff5bb260df2e  (Balanced) *
Power Scheme GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c  (High performance)
Power Scheme GUID: a1841308-3541-4fab-bc81-f71556f20b4a  (Power saver)

F:\test>test
GUID 1 = 381b4222-f694-41f0-9685-ff5bb260df2e
GUID 2 = 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
GUID 3 = a1841308-3541-4fab-bc81-f71556f20b4a

F:\test>

我如何从输出中提取活动 GUID powercfg /l

使用以下批处理文件:

@echo off
Setlocal EnableDelayedExpansion
for /f "tokens=*" %%f in ('powercfg.exe /L ^| findstr ^*') do (
  set _output=%%f
  for /f "tokens=4" %%g in ('echo !_output!') do (
    set _guid=%%g
    )
  )
echo %_guid%
endlocal

笔记:

  • 有功功率方案以 结束*,使用findstr查找输出中的该行
  • GUID 是第四个标记,使用另一个从输出中提取它for /f
  • usebackq如果你使用,则不需要'

输出:

F:\test>powercfg /l

Existing Power Schemes (* Active)
-----------------------------------
Power Scheme GUID: 381b4222-f694-41f0-9685-ff5bb260df2e  (Balanced) *
Power Scheme GUID: 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c  (High performance)
Power Scheme GUID: a1841308-3541-4fab-bc81-f71556f20b4a  (Power saver)

F:\test>test
381b4222-f694-41f0-9685-ff5bb260df2e

F:\test>

进一步阅读

答案2

这就是我最终做的事情:

@echo off
Setlocal EnableDelayedExpansion

::Import Power Config
powercfg -import C:\Windows\Temp\Never-Sleep.pow

::Get GUID of Never-Sleep
for /f "tokens=*" %%f in ('powercfg.exe /L ^| findstr ^Never-Sleep') do (
  set _output=%%f
  for /f "tokens=4" %%g in ('echo !_output!') do (
    set _guid=%%g
    )
  )

::Set Power Config to Active
powercfg %_guid%

endlocal

相关内容