编写一个简单的批处理文件来检查程序是否正在运行

时间:2015-02-17 11:30:03

标签: windows batch-file

我和我的几个朋友正在使用Dropbox上的共享文件夹,其中已经上传了我们的Minecraft服务器。这一点的意思是任何人都可以随时启动一个服务器,一个人不得不一直运行它。

唯一的问题是,两个人可能同时启动服务器,并且可能会出现重叠的保存文件。为了解决这个问题,我想写一个简单的批处理文件。

逻辑是:

  1. 如果过程" minecraft_server.1.8.1"正在运行,将服务器文件夹重命名为" RUNNING AS _INSERT_NAME_HERE _",ELSE将其重命名为" Minecraft服务器"

  2. NAME 将被读作计算机名称(如果可能的话),或者是用户创建的某个txt文件(写出自己的名字) )

  3. 我从来没有写过批处理文件,我也不知道这是否可行,但看起来很简单,任何帮助都会受到赞赏。

    提前谢谢。

    好的,经过一些修补,我写了我的第一个批处理文件。在大多数情况下,它似乎正在起作用,但我似乎无法实现正确的循环。

    @echo off
    IF EXIST *_RUNNING.txt (
    echo "ERROR, SERVER ALREADY RUNNING as %computername%"
    pause
    EXIT
    ) ELSE (
    copy NUL %computername%_RUNNING.txt 
    START /WAIT minecraft_server.1.8.1.exe
    tasklist /FI "IMAGENAME eq javaw.exe" 2>NUL | find /I /N "javaw.exe">NUL
    :loop 
    IF "%ERRORLEVEL%"=="0" (
    TIMEOUT /t 5
    GOTO loop
    ) ELSE (
    del %computername%_RUNNING.txt
    echo "Server ended."
    pause
    EXIT ) )
    

    当我启动minecraft_server.1.8.1.exe时,它会启动javaw.exe,这是启动服务器的实际过程。之后,我只检查进程是否仍在运行。但是,我似乎无法循环代码的特定部分,我不断收到synatx错误。

1 个答案:

答案 0 :(得分:3)

这不是您在问题主题中寻找的内容,但如果我做对了,您希望避免服务器启动两次。所以我会做以下事情:

创建一个批处理文件:

首先检查是否存在名为* _MinecraftServer.txt的文件。如果是,则假定服务器已在运行并且只是退出。 如果不存在此类文件,则会创建该文件。 然后它启动服务器。 服务器退出后,文件将被删除。

这将是这样的:

@echo off
REM Define a filename for the text-file informing other people that a server is running
SET FILENAME=%computername%_MinecraftServer.txt
REM Check if such a file already exists, if not refuse to start:
if exist *_MinecraftServer.txt (
  REM Such a file exists, print the content of the file:
  echo "ERROR, SERVER ALREADY RUNNING"
  type *_MinecraftServer.txt
) else (
  REM No such file is found. Create a file, then start the server process.
  echo "SERVER is running on %computername%" > %FILENAME%
  REM replace the notepad.exe with the name of the server.exe (and all    params it requires)
  REM Maybe you will also need to write the full-path to the server
  notepad.exe
  REM Once the server exits, remove the file
  del %FILENAME%
  echo "Server exited"
)
REM Require the user to hit a key before exiting the batch:
pause

此示例批处理启动notepad.exe并创建文件COMPUTERNAME_MinecraftServer.txt。 您必须使用minecraft服务器exe的路径替换notepad.exe。 请注意,如果涉及的任何目录包含空格,我不确定该批处理是否有效。

当然,只有从现在起所有人都只使用批处理文件启动服务器,这才有效。 此外,理论上如果多个用户或多或少同时启动服务器,则可以运行多个服务器,因为在dropbox上传和分发创建的txt文件之前会有一些延迟。