Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行Windows批处理文件的任务计划程序_Windows_Batch File_Scheduled Tasks - Fatal编程技术网

运行Windows批处理文件的任务计划程序

运行Windows批处理文件的任务计划程序,windows,batch-file,scheduled-tasks,Windows,Batch File,Scheduled Tasks,我看过这篇文章。 它不是Win2008,而是Server2003 有一个按时安排的任务 不跑。是否计划或“要求”手动运行 跑。。 D:\WORK\Scripts\res\u tc.bat 以前在使用双冒号时遇到过问题:“以前和尝试过使用:REM-但没有区别 运行方式: NT授权\系统 @ECHO OFF CLS REM DISABLE TOMCAT CHECK SCHTASKS /QUERY|find /i "TCCheck">NUL IF NOT ERRORLEVEL 1 SCHTA

我看过这篇文章。

它不是Win2008,而是Server2003

有一个按时安排的任务

不跑。是否计划或“要求”手动运行

跑。。 D:\WORK\Scripts\res\u tc.bat

以前在使用双冒号时遇到过问题:“以前和尝试过使用:REM-但没有区别

运行方式: NT授权\系统

@ECHO OFF
CLS

REM DISABLE TOMCAT CHECK
SCHTASKS /QUERY|find /i "TCCheck">NUL
IF NOT ERRORLEVEL 1 SCHTASKS /CHANGE /TN "TCCheck" /DISABLE

ECHO CHECKING FOR AND KILLING JAVA
TASKLIST | FIND /I "java.exe" && IF NOT ERRORLEVEL 1 TASKKILL /F /IM java.exe

REM LOOK FOR TOMCAT..
REM If Tomcat was not installed using the installer - instead using a batch file
REM We have to look for the service instead
REM We cannot depend on the Registry key - HKLM\SOFTWARE\Apache Software Foundation\Tomcat
REM Instead, we have to look for it using the registry key
REM HKLM\SYSTEM\CurrentControlSet\services
REM However, we know Tomcat - could be tomcat5, tomcat6, or tomcat7

FOR /F "usebackq tokens=1" %%a in (`reg query "HKLM\SYSTEM\CurrentControlSet\services" ^| find /i "tomcat"`) do SET TomcatService=%%a 
REM THANKS FOR THIS - https://stackoverflow.com/questions/17279114/split-path-and-take-last-folder-name-in-batch-script
set TomcatServiceName1=%TomcatService:~0,-1%
for %%f in (%TomcatServiceName1%) do set TomcatServiceName=%%~nxf

FOR /F "usebackq tokens=3" %%a in (`reg query "%TomcatService%" /v ImagePath`) do SET TomcatFolder=%%a 
FOR /F "tokens=1-2,* delims=\" %%1 IN ("%TomcatFolder%") do Set TomcatLocation= %%1\%%2

REM Stop Service: Apache Tomcat
ECHO STOPPING SERVICE Apache Tomcat
NET STOP %TomcatServiceName%

ECHO CHECKING TO INSURE SERVICE Apache Tomcat IS STOPPED
NET START | FIND /I "Apache Tomcat"
IF NOT ERRORLEVEL 1 ECHO Apache Tomcat IS STARTED... STOPPING NOW
IF NOT ERRORLEVEL 1 NET STOP %TomcatServiceName%

ECHO DOUBLE-CHECKING TO INSURE SERVICE Apache Tomcat IS STOPPED
PING 127.0.0.1 -w 1 > NUL
NET START | FIND /I "Apache Tomcat"
IF ERRORLEVEL 1 ECHO Apache Tomcat IS STOPPED... GOOD TO GO
IF NOT ERRORLEVEL 1 ECHO Apache Tomcat IS STARTED...
REM -- SOME FAILURE IN STOPPING THE SERVICE, YOU WILL WANT TO EXIT
IF NOT ERRORLEVEL 1 GOTO END
PING 127.0.0.1 -w 1000 > NUL

REM DELETE LOGS - YOU DON'T WANT TO DELETE LOGS IN A PRODUCTION ENVIRONMENT
ECHO DEL Tomcat Log files
ECHO Y | DEL %TomcatLocation%\aa*.*
ECHO Y | DEL %TomcatLocation%\logs\*.*
ECHO DEL Log files
ECHO Y | DEL D:\logs\*.*
ECHO Y | DEL D:\bo_logs\*.*

REM DELETE FOLDER: %TomcatLocation%\work (Catalina Work Directory)
ECHO DELETING THE %TomcatLocation%\work DIRECTORY
RD /S/Q %TomcatLocation%\work

REM DELETE FOLDER: %TomcatLocation%\temp (Temp Directory)
ECHO DELETING THE %TomcatLocation%\temp DIRECTORY
RD /S/Q %TomcatLocation%\temp
IF NOT EXIST %TomcatLocation%\temp\. MD %TomcatLocation%\temp

REM START SERVICE: APACHE TOMCAT
ECHO STARTING Apache Tomcat
NET START | FIND /I "Apache Tomcat"
IF ERRORLEVEL 1 NET START %TomcatServiceName%
IF NOT ERRORLEVEL 1 ECHO Apache Tomcat IS ALREADY STARTED
PING 127.0.0.1 -w 1000 > NUL
ECHO.
ECHO PROCESS IS COMPLETE - VISUALLY DOUBLE CHECK TO INSURE
ECHO Apache Tomcat
ECHO ARE STARTED

REM ENABLE TOMCAT CHECK
SCHTASKS /QUERY|find /i "TCCheck">NUL
IF NOT ERRORLEVEL 1 SCHTASKS /CHANGE /TN "TCCheck" /ENABLE

GOTO END

:END
rem pause
EXIT
在计划任务中使用安全性的另一个考虑因素。。您可能希望坚持使用参数,以便不会“自动”调用文件

考虑

SET /A ARGS_COUNT=0

FOR %%A in (%*) DO SET /A ARGS_COUNT+=1

REM ECHO %ARGS_COUNT%

If %ARGS_COUNT% == 0 GOTO END
If %ARGS_COUNT% == 1 GOTO CONTINUE

:CONTINUE
REM DISABLE TOMCAT CHECK
SCHTASKS /QUERY|find /i "TCCheck">NUL
IF NOT ERRORLEVEL 1 SCHTASKS /CHANGE /TN "TCCheck" /DISABLE
...
在计划任务中,将运行修改为(注意bat和1后面的空格)。。 D:\WORK\Scripts\res\u tc.bat 1

然后,必须从命令提示符下运行批处理文件,如下所示:res_tc.bat 1或类似的东西。。如果您只运行一个res_tc.bat而没有参数,那么fille将简单地结束而没有执行。希望这有帮助

注意:不建议在计划任务中使用下一节,但建议在独立文件中使用下一节。如果希望以相对快速可靠的方式停止/启动ApacheTomcat,可以执行以下操作(靠近顶部-请注意添加选项):

如果不是%errorlevel%1…
则不正确。正确的用法是

if not errorlevel 1 ...  
if not %errorlevel%==1 ...

刚刚添加了对服务位置、安装文件夹和服务名称的更强大的注册表检测功能,以便在任何较新版本的ApacheTomcat中都可以使用。
ECHO CHECKING FOR AND KILLING JAVA
TASKLIST | FIND /I "java.exe" && IF NOT %ERRORLEVEL% 1 TASKKILL /F /IM java.exe
if not errorlevel 1 ...  
if not %errorlevel%==1 ...