.BAT файл продолжает открывать неограниченное количество экземпляров после Windows Update - PullRequest
0 голосов
/ 03 января 2019

Итак, этот bat-файл отлично работал перед самым последним обновлением Windows.

@Echo off
:Start
Start E:\directoryhere?listen -dedicated
echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost
goto Start

Так что это запустит выделенный сервер.Откроется командная строка.Когда все покинули сервер или игра завершилась, командная строка закроется, а затем снова откроется файл .bat.Теперь после этого обновления .bat-файл просто продолжает открывать приглашение cmd, пока оно открыто.Так что у меня сразу будет открыто 20 экземпляров, и мой процессор на 100%.

У меня также был этот код перед обновлением Windows до этого, который в конечном итоге делал то же самое.

@echo off
cd "E:\directoryhere\"
:loop
Start RxGame-Win64-Test.exe server lv_canyon?listen -dedicated | set /P "="
goto loop

Этот код работал, но 2 обновления окна до того, как закончилосьделать то же самое.Он просто продолжит открывать экземпляры и сделает мой процессор на 100%.

Как проверить, открыта ли подсказка cmd, не открывать ли ее снова и продолжать работать до тех пор, пока подсказка cmd не закроется, а затем снова открыть ее?.

1 Ответ

0 голосов
/ 03 января 2019

Простое исправление, которое можно проверить, - процесс уже открыт первым с использованием tasklist.Пожалуйста, убедитесь, что вы ищете, как называется ваше реальное приложение.Для этого примера я предполагаю, что он называется RxGame-Win64-Test.exe.Ниже приведены несколько вариантов сценариев.

Этот сценарий ниже будет проверять, открыто ли приложение RxGame-Win64-Test.exe, прежде чем запускать другое:

@ECHO OFF
@SETLOCAL enabledelayedexpansion
GOTO LOOP

:LOOP

Rem | Check If Window Is Open
tasklist /FI "IMAGENAME eq RxGame-Win64-Test.exe" 2>NUL | find /I /N "RxGame-Win64-Test.exe">NUL
if not "%ERRORLEVEL%"=="0" (

    Rem | Process Not Found
    timeout /T 10 /NOBREAK

    Rem | Restart Server
    start "" "RxGame-Win64-Test.exe server lv_canyon?listen -dedicated"

    Rem | GOTO LOOP
    GOTO LOOP

)

GOTO LOOP

Не уверен, что RxGame-Win64-Test.exeэто программа на основе CMD или нет, но если это скрипт, вам поможет:

@ECHO OFF
@SETLOCAL enabledelayedexpansion

Rem | First Load, Start Server
start "DedicatedServerLauncher" cmd /c "RxGame-Win64-Test.exe server lv_canyon?listen -dedicated"

GOTO LOOP

:LOOP

Rem | Reset PID
Set "PID="

Rem | Grab The Current Window PID
FOR /F "tokens=2" %%# in ('tasklist /v ^| find "DedicatedServerLauncher" ^| find "Console"') do set PID=%%#

Rem | Check If Window Is Open
if "!PID!"=="" (

    Rem | Process Not Found
    timeout /T 10 /NOBREAK

    Rem | Restart Server
    start "DedicatedServerLauncher" cmd /c "RxGame-Win64-Test.exe server lv_canyon?listen -dedicated"

    Rem | GOTO LOOP
    GOTO LOOP
)

GOTO LOOP

Для получения справки по любой из команд выполните следующее:

  • call /?
  • set /?
  • for /?
  • if /?
  • find /?
  • И т. Д.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...