2010-04-12 47 views
0

我試圖使用腳本來控制我的電源選項,因爲XP不會給你一個直觀的方式來改變CPU頻率選項。這裏是我的腳本至今:只有一些Windows shell命令通過ruby工作?

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:\鞋>紅寶石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

你需要執行'cmd.exe'(從而創造一個新的shell),每一次? – Syntactic 2010-04-12 12:30:01

回答

0

嘗試

%x[cmd.exe /C ....] 

沒有的'標籤。這對我來說很有用,當我必須在shell中使用ruby進行操作時。

+0

沒有改進。 shell命令似乎在運行,但它們只是停留在自己的世界中。 – Sanarothe 2010-04-12 19:43:55

1

腳本正常工作(實際上,你並不需要的cmd.exe/C位);如果「輸入」是一個整數,而不是像「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 

然而,這種代碼修改的方案(一種輪廓的),而不是在neccesarily活性方案

+0

我只使用了CMD.exe/C,因爲單獨的反引號工作不正常,我正在探索其他選項。由於某種原因,當我在命令提示符下執行 POWERCFG/QUERY 1/NUMERICAL時,我可以看到什麼看起來是查詢的「正確」答案:AC處於常量狀態,DC處於自適應狀態。當我從ruby腳本中運行相同的命令時,無論我嘗試創建哪種shell或腳本更改,我都只能看到Adaptive/Adaptive。我的腳本行更改設置對「真實」查詢輸出沒有影響。 :(我完全迷失了方向。 – Sanarothe 2010-04-12 19:43:13

+0

哦,我重讀你說什麼。插着to_i到獲得,現在我的變化正在發生,但他們仍然只適用於什麼Ruby腳本知道是在架構問題,查詢到1 /數值仍然從外殼和腳本不同(不同的價值觀,相同的名字。) – Sanarothe 2010-04-12 19:46:15

+0

代碼加入到回答。 – steenslag 2010-04-12 21:05:04

0

不要直接從system調用中運行這些命令,請嘗試在.bat文件中編寫POWERCFG調用並通過system運行該文件。過去,我必須爲某些DOS應用程序執行此操作,而這些應用程序的運行方式與在cmd.exe窗口中手動執行時的方式相同。

編輯:基於關閉的例子here的,我會建議運行POWERCFG /SETACTIVE Portable/Laptop您做出後您的更改(以確保您的更改生效)。

+0

/SETACTIVE使得方案的主動方案。不知道這是什麼期望。 – steenslag 2010-04-12 20:56:01