Como faço um arquivo em lote que iniciou um processo para aguardar o término do processo?

3

Meu computador não é o melhor, mas cumpre os requisitos mínimos para executar o GTA V . Eu queria fazer o jogo rodar mais rápido, então em vez de usar o .exe normal, esse é o arquivo em lote que eu uso para iniciar o jogo:

start steam://rungameid/271590 
timeout 60
wmic process where name="GTA5.exe" CALL setpriority "high priority"
wmic process where name="gtavlauncher.exe" CALL setpriority "idle"
wmic process where name="subprocess.exe" CALL setpriority "idle"

Então, basicamente, após o lançamento do jogo, ele define as prioridades de modo que somente o GTA5.exe seja executado e o cpu ignore os outros processos que o acompanham. Eu queria que ele rodasse ainda mais suave e mudando o tema do windows para "classic" ajuda com isso, então eu baixei um programa que me permite alterar os temas com comandos cmd e fiz este script -

START c:\ThemeSwitcher classic
start steam://rungameid/271590 
timeout 60
wmic process where name="GTA5.exe" CALL setpriority "high priority"
wmic process where name="gtavlauncher.exe" CALL setpriority "idle"
wmic process where name="subprocess.exe" CALL setpriority "idle"
wait process where name="GTA5.exe" 
-----------------------------------------------------------
start c:\ThemeSwitcher MY PC

no "----------" Eu quero colocar algo que faz o arquivo esperar que os processos terminem antes de mudar o tema para normal, então eu não tenho que fazê-lo manualmente. Eu só conheço alguns comandos em lote que eu usei no google, e agora não ajuda. desculpe pelo mau inglês.

    
por Amitb01FUB 03.12.2016 / 17:07

2 respostas

1

crie um lote assim:

title i'm waiting
start /wait /high cmd /ktitle kill me 
echo This is the end 
pause

você pode ver como o comando start do trabalho com wait parameter

você pode criar um lote com pause , depois de fazer algo atingir o espaço na janela do lote, então ele executa o próximo comando

você provavelmente está procurando por algo como waiting for terminate existing process :

echo do somthing at start
:start_test
::wait ~6s -1s = 5s
::you can use TIMEOUT 5
call :sleep 6
wmic process where name="notepad.exe" get name |find "notepad.exe">nul
if %errorlevel%==0 goto :start_test
echo do somthing at the end
::pause
goto :eof

:sleep
ping 127.0.0.1 -n %1 > nul
goto :eof

o processo de teste existe a cada 5s, você pode mudar o intervalo.

    
por 03.12.2016 / 17:55
0

Outra abordagem que lança apenas um novo processo é usar o PowerShell!

Você pode encontrar um processo pelo nome com o cmdlet Get-Process . Cada objeto de processo possui um método WaitForExit que, como seria de esperar, bloqueia até que esse processo seja interrompido. Portanto, este comando do PowerShell será interrompido até GTA5.exe , gtavlauncher.exe e subprocess.exe exit:

Get-Process 'gta5', 'gtavlauncher', 'subprocess' | % {$_.WaitForExit()}

Isso localiza todos os processos com esses nomes e aguarda que cada um saia. O aviso não voltará até que todos tenham ido embora.

Você pode usar isso para bloquear um script em lote iniciando o PowerShell dando esse comando (eu o reduzi um pouco usando um alias):

powershell -command "gps 'gta5','gtavlauncher','subprocess'|%{$_.WaitForExit()}"

Quando os processos saírem, o PowerShell sairá e retornará o controle para o script em lote.

    
por 06.12.2016 / 18:08