2013-02-02 73 views
0

我正在運行批處理文件來啓動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 am)
  • 說服務器在5分鐘內關閉(凌晨1:55)
  • 說服務器正在關閉,再見。 (凌晨2:00)
  • 停止(凌晨2:00)

如果這是不可能的,任何建議,將不勝感激。

+1

使用任務調度程序... –

+0

這可能是可能的,但如果您真的想從批處理文件中執行此操作有很多缺點。使用[遊戲中的插件](http://dev.bukkit.org/server-mods/auto-shutdown/)是最好的解決方案。否則AutoHotkey或Powershell會更容易。 – wimh

+0

你問的是可能的。只需在時間上檢查一下ping/goto即可。 01:45,01:50和01:55會回覆警告。然後在02:00使用wmic殺死Java.exe,類似於'wmic process where name =「java.exe」delete'。星期一之前我不會在Windows電腦上工作。如果這個問題仍然沒有回答,我會告訴你我的想法。 – rojo

回答

0

這是你在找什麼?

@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 
相關問題