【问题标题】:Run Batch File That Stops Process at Specified Time运行在指定时间停止进程的批处理文件
【发布时间】:2013-02-02 08:31:26
【问题描述】:

我正在运行一个批处理文件来启动一个 Minecraft 服务器。这是以下脚本:

@echo off
"%ProgramFiles%\Java\jre7\bin\java.exe" -Xms1024M -Xmx1024M -jar craftbukkit-1.4.7-R1.0.jar
pause

我突然想到,批处理文件可能会在一天中的指定时间自动停止进程,但不是通过任何形式的倒计时。

另外,我曾希望它可以在命令提示符中写下以下几行:

  • 说服务器将在 15 分钟后关闭(凌晨 1:45)
  • 说服务器将在 10 分钟后关闭(凌晨 1:50)
  • 说服务器将在 5 分钟后关闭(凌晨 1:55)
  • 说服务器正在关闭,再见。 (凌晨 2:00)
  • 停止(凌晨 2:00)

如果这是不可能的,任何建议都将不胜感激。

【问题讨论】:

  • 使用任务调度器...
  • 这可能是可能的,但如果您真的想从批处理文件中执行此操作,则有很多缺点。使用in-game plugin 是最好的解决方案。否则 AutoHotkey 或 Powershell 会更容易。
  • 您的要求是可能的。只需循环 ping / goto 并检查时间。在 01:45、01:50 和 01:55 回声警告。然后在 02:00 使用 wmic 杀死 Java.exe,类似于 wmic process where name="java.exe" delete。我要到星期一才会在 Windows 电脑前。如果到那时这个问题仍然没有答案,我会告诉你我的想法。

标签: batch-file minecraft


【解决方案1】:

这是你要找的吗?

@echo off
setlocal enabledelayedexpansion
cmd /c "%ProgramFiles%\Java\jre7\bin\java.exe" -Xms1024M -Xmx1024M -jar craftbukkit-1.4.7-R1.0.jar

:waitloop
for /f "tokens=1-3 delims=:." %%I in ("%time%") do (
    if "%%I"==" 1" (
        if "%%J"=="45" (
            echo ! Server is closing in 15 minutes.
        ) else if "%%J"=="50" (
            echo ! Server is closing in 10 minutes.
        ) else if "%%J"=="55" (
            echo ! Server is closing in 5 minutes.
        )
    ) else if "%%I"==" 2" (
        echo ! Toodloo.
        wmic process where name="java.exe" delete >NUL 2>NUL
        goto :EOF
    )
    set /a secs=60 - %%K + 1
    ping 127.0.0.1 -n !secs! >NUL
)
goto waitloop

【讨论】:

    猜你喜欢
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多