我正在尝试使用脚本来控制我的电源选项,因为XP没有为您提供更改CPU频率选项的直观方法。到目前为止,这是我的脚本:
meh = `cmd.exe /C POWERCFG.EXE /QUERY Portable/Laptop`
puts ""
puts meh
case input
when 1 then system('cmd.exe /C POWERCFG.EXE /CHANGE Portable/Laptop /processor-throttle-ac NONE')
when 2 then system('cmd.exe /C POWERCFG.EXE /CHANGE Portable/Laptop /processor-throttle-ac ADAPTIVE')
when 3 then `cmd.exe /C POWERCFG.EXE /CHANGE Portable/Laptop /processor-throttle-ac CONSTANT`
end
问题是改变根本不会发生。如果我将相同的命令直接运行到cmd.exe提示符中,它们可以正常工作。这很奇怪,但在初始powercfg查询后没有任何作用。我觉得我错过了一些非常明显的东西。
如何让上述脚本正确运行?
更新: C:\ shoe> ruby freq.rb
Field Description Value
----------------- -----
Name Portable/Laptop
Numerical ID 1
Turn off monitor (AC) After 15 mins
Turn off monitor (DC) After 5 mins
Turn off hard disks (AC) After 30 mins
Turn off hard disks (DC) After 5 mins
System standby (AC) After 20 mins
System standby (DC) After 5 mins
System hibernates (AC) Not Supported
System hibernates (DC) Not Supported
Processor Throttle (AC) ADAPTIVE
Processor Throttle (DC) ADAPTIVE
Enter a number to switch portable/laptop profile to that mode.
1 - None (HIGHEST FREQUENCY MODE)
2 - Adaptive (SPEEDSTEP)
3 - Constant (LOWEST FREQUENCY MODE)
#SCRIPT IS CANCELED HERE. I've already tested the methods to change powercfg options, and they work, but they only apply to Ruby's instance of powercfg.
C:\shoe>powercfg /QUERY 1 /NUMERICAL
Field Description Value
----------------- -----
Name Portable/Laptop
Numerical ID 1
Turn off monitor (AC) After 15 mins
Turn off monitor (DC) After 5 mins
Turn off hard disks (AC) After 30 mins
Turn off hard disks (DC) After 5 mins
System standby (AC) After 20 mins
System standby (DC) After 5 mins
System hibernates (AC) Not Supported
System hibernates (DC) Not Supported
Processor Throttle (AC) CONSTANT
Processor Throttle (DC) ADAPTIVE
答案 0 :(得分:1)
脚本运行正常(实际上,您不需要cmd.exe / C位);如果“input”是一个整数,而不是像“1”这样的字符串,那就可以了。
这可能是你忽略的令人难以置信的显而易见的事情吗? 这适用于我(我的系统不支持processor_throttle,所以我测试了其他东西)。
def status
`POWERCFG.EXE /QUERY #{@scheme_name} `
end
@scheme_name = "Portable/Laptop"
puts 'Before:'
puts status
`POWERCFG.EXE /CHANGE #{@scheme_name} /disk-timeout-ac 15`
puts '_'*50
puts 'After: '
puts status
但是,此代码更改了一个方案(配置文件的种类),而不是活动方案。
答案 1 :(得分:0)
尝试
%x[cmd.exe /C ....]
是没有标记。当我必须在shell中用红宝石做事时,这对我有用。
答案 2 :(得分:0)
不要直接从system
调用运行这些命令,而是尝试在.bat文件中编写POWERCFG
调用,然后通过system
运行该文件。我必须在过去为某些DOS应用程序执行此操作,以便在cmd.exe窗口中手动执行它们时的运行方式。
修改:根据示例here,我建议您在进行更改后运行POWERCFG /SETACTIVE Portable/Laptop
(以确保更改生效)。