2017-06-23 63 views
0

我想使用批处理文件来检查如果一个.exe正在运行,如果是,请设置为30秒,并无休止地重新检查。如果.exe没有运行,则启动另一个.bat文件,然后再次检查常量循环,而不需要用户操作。批处理文件检查,重新检查,并开始如果没有运行说.exe无尽

我已经在这里查了很多页面,并尝试了很多东西,并且不能缝以获得任何工作。所以生病给更多的细节。

我需要这个.bat文件,一旦开始检查,看看“7dtd.exe”是否正在运行,如果它正在运行,然后等待,我已经看到整个ping null事情作为一个计时器约30秒,然后如果“7dtd.exe”正在运行,请重新检查。如果它没有运行,那么我需要它启动一个单独的“startdedi.bat”文件,然后检查相同的“7dtd.exe”并继续无休止地检查。任何帮助将是伟大的!

startdedicated.bat

@echo off 
rem Starts a dedicated server 
rem 
rem -quit, -batchmode, -nographics: Unity commands 
rem -configfile   : Allows server settings to be set up in an xml config file. Use no path if in same dir or full path. 
rem -dedicated     : Has to be the last option to start the dedicated server. 

set LOGTIMESTAMP= 


:: -------------------------------------------- 
:: REMOVE OLD LOGS (only keep latest 20) 

for /f "tokens=* skip=19" %%F in ('dir 7DaysToDieServer_Data\output_log*.txt /o-d /tc /b') do del 7DaysToDieServer_Data\%%F 



:: -------------------------------------------- 
:: BUILDING TIMESTAMP FOR LOGFILE 

:: Check WMIC is available 
WMIC.EXE Alias /? >NUL 2>&1 || GOTO s_start 

:: Use WMIC to retrieve date and time 
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
    IF "%%~L"=="" goto s_done 
    Set _yyyy=%%L 
    Set _mm=00%%J 
    Set _dd=00%%G 
    Set _hour=00%%H 
    Set _minute=00%%I 
    Set _second=00%%K 
) 
:s_done 

:: Pad digits with leading zeros 
Set _mm=%_mm:~-2% 
Set _dd=%_dd:~-2% 
Set _hour=%_hour:~-2% 
Set _minute=%_minute:~-2% 
Set _second=%_second:~-2% 

Set LOGTIMESTAMP=__%_yyyy%-%_mm%-%_dd%__%_hour%-%_minute%-%_second% 

:s_start 


:: -------------------------------------------- 
:: STARTING SERVER 


echo|set /p="251570" > steam_appid.txt 

start 7daystodieserver -logfile 7DaysToDieServer_Data\output_log%LOGTIMESTAMP%.txt -quit -batchmode -nographics -configfile=serverconfig.xml -dedicated 


echo Starting server ... 
timeout 15 

cls 

echo. 
echo Server running in background, you can close this window. 
echo You can check the task manager if the server process is really running. 
echo. 
echo. 

pause 

我试过这个命令了,它的接缝只要在命令窗口熬夜服务器关闭时要工作我需要的方式来

@echo off 
cls 
:start 
@echo Starting 7DTD Dedicated Test Server... 

7daystodieserver -logfile 7DaysToDieServer_Data\output_log%LOGTIMESTAMP%.txt -quit -batchmode -nographics - 

configfile=serverconfig.xml -dedicated 

echo. 
for /F "tokens=2" %%i in ('date /t') do set mydate=%%i 
set mytime=%time% 
echo Restarting Test Server: %mydate%:%mytime% 
echo. 
goto start 

它重新启动它并让我知道服务器关闭的时间。再次感谢大家的帮助,这让我疯狂!

+1

你说你不能工作......但你有什么试过?我们不是在这里为您编写代码,只是回答关于您的代码的具体问题。请阅读:[我如何提出一个好问题?](https://stackoverflow.com/help/how-to-ask) – Clonkex

+0

'startdedi.bat'是做什么的?它只是启动'7dtd.exe'吗?它的内容是什么? – Compo

+0

请使用** edit **工具将该内容和任何伴随信息添加到原始问题中。 – Compo

回答

0

是否需要ping才能等待?改为使用timeout

这个脚本会

  • 检查是否7dtd.exe运行
  • 如果没有找到,如果找到启动startdedi.bat和结束
  • ,等待30秒,并开始了

:a 
tasklist|findstr "7dtd.exe"||startdedi.bat 
timeout 30 
goto a 

第二行列出所有任务,管道s输出到findstr和'失败',即找不到匹配,开始第二个.bat(我知道有/fi参数,但不设置错误级别)。

如果你坚持要用ping无论出于何种原因:

ping -n 31 localhost 
+1

逻辑是相反的,如果exe文件不是**运行,启动bat,所以将'&&'改为'||'。因为这是批量使用呼叫,否则当前批次将被终止。 – LotPings

+0

@LotPings感谢您通知我。 – Regejok

+0

是否有保持批处理运行而不是结束? –

1

我相信Regejok得到了tasklist命令错误,也是有条件的命令错误的体会。

试试这个:

@ECHO OFF 
:LOOP 
TASKLIST /FI "IMAGENAME eq 7dtd.exe"|FIND "==">NUL&&(TIMEOUT 30 /NOBREAK>NUL 
)||CALL startdedi.bat 
GOTO LOOP 
+0

@ECHO OFF :LOOP TASKLIST/FI “IMAGENAME EQ 7dtd.exe” |查找 “==”> NUL &&(TIMEOUT 30/NOBREAK> NUL )|| CALL startdedi .bat GOTO LOOP 如果.exe没有运行,是否会在启动前等待30秒? –

+0

这不是一个单方面的互动,你还没有回答我的问题,从三小时前... – Compo

+0

对不起,新的这个网站,没有看到评论区,是的startdedi.bat启动条件 @ ECHO OFF REM启动专用服务器 REM REM -QUIT,-batchmode,-nographics:统一命令 REM -configfile \t \t \t REM -dedicated:必须是启动专用服务器的最后一个选项。 :: STARTING SERVER 回声|设定/ P = “251570”> steam_appid.txt 开始7daystodieserver -logfile 7DaysToDieServer_Data \ output_log%LOGTIMESTAMP%的.txt -QUIT -batchmode -nographics -configfile = serverconfig.xml -dedicated 回应启动服务器... 超时15 –

0

了些研究后和挖掘更多的进入startdedi.bat文件我想这个代码,并将其接缝现在被完美的工作。再次感谢所有的帮助和建议!这个社区很棒!

@echo off 
cls 
:start 
@echo Starting 7DTD Dedicated Test Server... 

@echo off 
rem Starts a dedicated server 
rem 
rem -quit, -batchmode, -nographics: Unity commands 
rem -configfile   : Allows server settings to be set up in an xml config file. Use no path if in same dir or full path. 
rem -dedicated     : Has to be the last option to start the dedicated server. 

set LOGTIMESTAMP= 


:: -------------------------------------------- 
:: REMOVE OLD LOGS (only keep latest 20) 

for /f "tokens=* skip=19" %%F in ('dir 7DaysToDieServer_Data\output_log*.txt /o-d /tc /b') do del 7DaysToDieServer_Data\%%F 



:: -------------------------------------------- 
:: BUILDING TIMESTAMP FOR LOGFILE 

:: Check WMIC is available 
WMIC.EXE Alias /? >NUL 2>&1 || GOTO s_start 

:: Use WMIC to retrieve date and time 
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
    IF "%%~L"=="" goto s_done 
    Set _yyyy=%%L 
    Set _mm=00%%J 
    Set _dd=00%%G 
    Set _hour=00%%H 
    Set _minute=00%%I 
    Set _second=00%%K 
) 
:s_done 

:: Pad digits with leading zeros 
Set _mm=%_mm:~-2% 
Set _dd=%_dd:~-2% 
Set _hour=%_hour:~-2% 
Set _minute=%_minute:~-2% 
Set _second=%_second:~-2% 

Set LOGTIMESTAMP=__%_yyyy%-%_mm%-%_dd%__%_hour%-%_minute%-%_second% 

:s_start 

7daystodieserver -logfile 7DaysToDieServer_Data\output_log%LOGTIMESTAMP%.txt -quit -batchmode -nographics -configfile=serverconfig.xml -dedicated 

echo. 
for /F "tokens=2" %%i in ('date /t') do set mydate=%%i 
set mytime=%time% 
echo Test Server was shutdown: %mydate%:%mytime% 
echo. 
goto start 
相关问题