.BAT 文件在 Windows 更新后继续打开无限实例
.BAT file keeps opening unlimited instances after Windows Update
所以这个 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 个实例,我的 cpu 是 100%。
我在 windows 更新之前也有这段代码,但最终做同样的事情。
@echo off
cd "E:\directoryhere\"
:loop
Start RxGame-Win64-Test.exe server lv_canyon?listen -dedicated | set /P "="
goto loop
该代码曾经有效,但 2 window 更新之前最终做同样的事情。它只会继续打开实例并使我的 cpu 100%。
有什么方法可以确保查看 cmd 提示符是否打开并且不重新打开它并保持它运行直到 cmd 提示符关闭然后重新打开它。
对此可以进行简单的修复,以检查进程是否已首先使用 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 /?
- 等等。
所以这个 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 个实例,我的 cpu 是 100%。
我在 windows 更新之前也有这段代码,但最终做同样的事情。
@echo off
cd "E:\directoryhere\"
:loop
Start RxGame-Win64-Test.exe server lv_canyon?listen -dedicated | set /P "="
goto loop
该代码曾经有效,但 2 window 更新之前最终做同样的事情。它只会继续打开实例并使我的 cpu 100%。
有什么方法可以确保查看 cmd 提示符是否打开并且不重新打开它并保持它运行直到 cmd 提示符关闭然后重新打开它。
对此可以进行简单的修复,以检查进程是否已首先使用 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 /?
- 等等。