3

Мой компьютер не самый лучший, но он отвечает минимальным требованиям для игры в GTA V. Я хотел, чтобы игра работала быстрее, поэтому вместо обычного .exe-файла это командный файл, который я использую для запуска игры:

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"

так что в основном после запуска игры она устанавливает приоритеты, поэтому запускается только GTA5.exe, а процессор игнорирует другие процессы, которые идут с ним. Я хотел, чтобы он работал еще более плавно, и изменение темы Windows на "классическую" помогает в этом, поэтому я скачал программу, которая позволяет мне изменять темы с помощью команд cmd, и я сделал этот скрипт:

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

в "----------" я хочу поместить что-то, что заставляет файл ждать завершения процессов, прежде чем менять тему на нормальную, поэтому мне не нужно делать это вручную. Я знаю только несколько пакетных команд, для которых я использовал Google, и сейчас это не помогает. Извините за плохой английский.

2 ответа2

1

создать партию как это:

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

Вы можете увидеть, как работает команда start с параметром wait

Вы можете создать пакет с pause , после того, как сделать что-то, нажмите пробел в окне пакета, а затем запустить следующую команду

вы, вероятно, ищете что-то вроде 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

это тестовый процесс существует каждые 5 секунд, вы можете изменить интервал.

0

Другой подход, который запускает только один новый процесс - это использование PowerShell!

Вы можете найти процесс по имени с помощью командлета Get-Process . У каждого объекта процесса есть метод WaitForExit который, как и следовало ожидать, блокируется до тех пор, пока этот процесс не остановится. Поэтому эта команда PowerShell будет зависать до тех пор , пока GTA5.exe , gtavlauncher.exe и subprocess.exe завершатся :

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

Он находит все процессы с этими именами и ожидает завершения каждого из них. Приглашение не вернется, пока они все не исчезнут.

Вы можете использовать это, чтобы заблокировать пакетный скрипт, запустив PowerShell с этой командой (я немного сократил его, используя псевдоним):

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

Как только процессы завершатся, PowerShell выйдет и вернет управление вашему пакетному сценарию.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .