正在开发 Windows 的 Caffinate 替代品,想知道是否有一种方法可以只获取当前使用的电源计划的 GUID,而不需要其余的输出,这是我的意思的一个示例。
使用时我得到了什么......
powercfg /list
Existing Power Schemes (* Active)
-----------------------------------
Power Scheme GUID: 381b4222-f694-41f0-9685-ff5bb260df2e (Balanced) *
我想要什么...
381b4222-f694-41f0-9685-ff5bb260df2e
这样我就可以引用它并在咖啡因完成后重新加载它。
@ECHO OFF
SETLOCAL
FOR /f "tokens=1-4" %%g IN ('powercfg /list^|find "*" ') DO IF "%%g%%h%%i"=="PowerSchemeGUID:" SET "guid=%%j"
ECHO guid=%guid%
GOTO :EOF
如果您想要列表中的其他指南,只需用
Balanced
High performance
或 Power saver
(或您可能需要的任何其他内容)替换 *
要获取当前电源方案,请使用
-getactivescheme
而不是 -list
(Powercfg Docs):
powercfg -getactivescheme
# Power Scheme GUID: 49371465-2b86-4782-9e84-816d3f61e3c8 (Ultimate Performance)
在Powershell中,我们可以使用Regex来提取GUID:
[regex]::Match((powercfg -getactivescheme), 'GUID: ([\w-]+)').Groups[1].Value
# 49371465-2b86-4782-9e84-816d3f61e3c8
[regex]::Matches((powercfg -list), 'GUID: ([\w-]+)') | %{$_.Groups[1].Value}
我们使用
[regex]
访问 .NET 正则表达式方法 Match
和 Matches
。运行 [regex] | Get-Member -Static
以获得其他方法的列表。 Match 和 Matches 的基本语法是:
[regex]::Match($stringToMatch, $regexPattern)
Match
返回第一个匹配项,Matches
返回匹配项的集合。
要列出所有电源方案 GUID,我们在电源方案列表上使用
[regex]::Matches
并将结果通过管道传输到 ForEach。 %{}
是 ForEach 的简写。 $_
表示循环中的当前项。在这种情况下,我们的 MatchInfo
对象。