2017-05-05 467 views
0

我不是一個批次編碼,但我試圖創建一個腳本,執行以下操作執行一次:進行批量「START/WAIT」命令等待程序的啓動

  • 使專用視頻卡(筆記本NVIDIA顯卡)
  • 運行對最終
  • 一旦比賽被終止特定的視頻遊戲和等待,禁止dGPU

下面的代碼的偉大工程與像NOTEPAD.EXE簡單的程序,因爲他們 immidiatly開始:

// enable dedicated GPU 
devcon enable "@PCI\VEN_10DE&DEV_1C8C&SUBSYS_8259103C&REV_A1\4&3455E2C8&0&0008" 

// start notepad and wait for its termination 
start /b /wait "" "C:\Windows\notepad.exe" || goto QUIT 

:QUIT 

// disable dedicated GPU 
devcon disable "@PCI\VEN_10DE&DEV_1C8C&SUBSYS_8259103C&REV_A1\4&3455E2C8&0&0008" 

exit 

的問題是,如果我改變了一些沉重的視頻遊戲「的notepad.exe」(BF1例如),這需要一些時間來啓動,該腳本不會等待遊戲的實際發射和與其他命令一起進行。所以結果是:

  • GPU就會啓動
  • GPU關閉(腳本退出)
  • 一段時間的比賽開始後(使用英特爾圖形)

有沒有一種辦法讓第二個命令(開始/等待)等待遊戲的實際啓動?

我需要這個劇本的原因是:NVIDIA的Optimus +的Windows 10 =微凍結

PS:對不起,我的英語。

+0

如果您不使用'start/b/wait「」',並將路徑放到您的遊戲可執行文件中,會發生什麼? – Compo

+0

使用:'開始「」「C:\ Windows \ notepad.exe」|暫停「 – Aacini

+0

@Compo相同的結果 –

回答

1
// start game launcher 
start /b /wait "" "launcherexecutable" 
:wait 
timeout 5 >nul 
tasklist |findstr /i /L /c:"launcherexecutable" /c:"gameexecutable" >nul 
if not errorlevel 1 goto wait 
:QUIT 

應反覆延遲對(5秒),那麼看到啓動器或遊戲可執行是否正在運行,並且如果是這樣重複循環。

因此,一旦遊戲可執行文件結束,應該繼續執行quit

顯然,將5更改爲其他值或根據需要添加中間可執行文件名稱。

+1

這可能會在一個捏,但作爲一個通用的解決方案沒有用。要將它限制在當前會話中,可以過濾當前'%SessionName%'(默認的「Console」)的任務列表。但是,通常在當前會話中可能會運行多個'launcherexecutable'實例,並且您只需要特定實例的進程樹。 PowerShell的'start-process-wait'在這方面更好。它使用Windows Job對象(即'CreateJobObject','AssignProcessToJobObject'),它不允許分離並等待作業中的所有進程退出。 – eryksun

+0

這工作,但我想避免使用循環和計時器,因爲時間可能會根據CPU負載和遊戲而改變。我相信有一種方法可以用更「優雅」的方式來解決這個問題。 –

+0

@eryksun我試過PowerShell的啓動過程 - 等待,結果相同。 –