只有一些Windows shell命令通过ruby工作?

时间:2010-04-12 12:25:08

标签: windows ruby command-line

我正在尝试使用脚本来控制我的电源选项,因为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

3 个答案:

答案 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(以确保更改生效)。