进行批量“START/WAIT”命令等待程序的启动
我不是一个批次编码,但我试图创建一个脚本,执行以下操作执行一次:进行批量“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:对不起,我的英语。
// 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
更改为其他值或根据需要添加中间可执行文件名称。
这可能会在一个捏,但作为一个通用的解决方案没有用。要将它限制在当前会话中,可以过滤当前'%SessionName%'(默认的“Console”)的任务列表。但是,通常在当前会话中可能会运行多个'launcherexecutable'实例,并且您只需要特定实例的进程树。 PowerShell的'start-process-wait'在这方面更好。它使用Windows Job对象(即'CreateJobObject','AssignProcessToJobObject'),它不允许分离并等待作业中的所有进程退出。 – eryksun
这工作,但我想避免使用循环和计时器,因为时间可能会根据CPU负载和游戏而改变。我相信有一种方法可以用更“优雅”的方式来解决这个问题。 –
@eryksun我试过PowerShell的启动过程 - 等待,结果相同。 –
如果您不使用'start/b/wait“”',并将路径放到您的游戏可执行文件中,会发生什么? – Compo
使用:'开始“”“C:\ Windows \ notepad.exe”|暂停“ – Aacini
@Compo相同的结果 –