2017-05-05 558 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的启动过程 - 等待,结果相同。 –