我有一个Windows批处理文件,它调用另一个文件,服务,它有一个需要重新启动的服务和机器列表,但是其中一个服务不需要在周末启动。有谁知道如何在服务文件中加入%dow%函数然后根据dow调用服务? PS - 它调用另一个批处理文件STOPANDWAIT,以确保服务尚未运行。
这是我的代码:
:start_services
set SECTION=start_services
REM We will try to start all services
echo.
echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo Starting services
echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
%TIME_STAMP% BEFORE Starting services >> %TIMETRAC_FILE%
REM Make sure the file that contains the services to be stopped and started actually exists
if not exist %SERVICES_FILE% (
%TIME_STAMP% Services file not found. >> %TIMETRAC_FILE%
echo Services file not found.
goto ERROR_FOUND
)
for /F "tokens=1,2* delims=," %%i in (%SERVICES%) do (
%TIME_STAMP% Starting %%i on %%j >> %TIMETRAC_FILE%
@echo Calling StartServiceAndWait for %%i on %%j
call StartServiceAndWait %%j %%i
%TIME_STAMP% Starting %%i Done >> %TIMETRAC_FILE%
)
%TIME_STAMP% AFTER Starting services >> %TIMETRAC_FILE%
if "%END_TAG%" == "start_services" goto PARTIAL_SUCCESS
我的%SERVICES%文件如下所示:
"EMSXComplianceService",\\bosxiptest
"Mxs.Xom",\\bosxiptest
"Mfs.Xom.Emsx",\\bosxiptest
"Mxs.Xom",\\bosxiptest
"Mxs.Xns",\\bosxiptest
"Mfs Wrangler Messanger",\\bosxiptest
我确实有一个全球%dow%,其中Wed设置为星期三等。
提前谢谢!
谢谢!
答案 0 :(得分:0)
您没有说出%dow%
的内容和%services%
文件的样本,所以让我们开始猜测。
尝试将过程中的主循环修改为:
SET "runtoday="
for /F "tokens=1,2* delims=," %%i in (%SERVICES%) do IF "%%j%%k"=="" (
if defined runtoday (
%TIME_STAMP% Starting %%i on %%j >> %TIMETRAC_FILE%
@echo Calling StartServiceAndWait for %%i on %%j
call StartServiceAndWait %%j %%i
%TIME_STAMP% Starting %%i Done >> %TIMETRAC_FILE%
)
) ELSE (
echo %%i|findstr "%dow%">nul
if errorlevel 1 (set "runtoday=") else (set "runtoday=Y")
)
然后在您的%SERVICES%文件中
[Mon]
service1,runs,Monday
service2,runs,Monday
[Tue Fri]
service3,runs,Tuesday and Friday
service4,runs,Tuesday and Friday
你的日期名/数字/在不包含逗号的行上的任何内容。我按照.INI文件中的样式将它们放在括号中以使它们显而易见。
注意:如果您将runtoday
设置为最初为空,则文件开头(直到第一个[dayname]行)的进程将不运行。如果您最初将其设置为非空,则每行将运行,直到遇到[dayname]行,从而开启审查。
答案 1 :(得分:0)
你可以使用' SET MYDATE =%DATE:~0.3%'获得当前的DOW。
假设您的服务文件类似于:
ServiceName1,Machine1
ServiceName2,Machine2
将行更改为:
ServiceName1,Machine1,1,1,1,1,1,1,1
ServiceName2,Machine2,0,1,1,1,1,1,0
你的For循环看起来像这样:
SET MYDATE=%DATE:~0,3%
for /F "tokens=1,2,3,4,5,6,7,8,9 delims=," %%i in (C:\Temp\ServiceList.txt) do (
ECHO Checking %%i on %%j
IF %MYDATE% == Mon (IF %%k == 1 (
%TIME_STAMP% Starting %%i on %%j >> %TIMETRAC_FILE%
@echo Calling StartServiceAndWait for %%i on %%j
call StartServiceAndWait %%j %%i
%TIME_STAMP% Starting %%i Done >> %TIMETRAC_FILE%
))
IF %MYDATE% == Tue (IF %%l == 1 (
%TIME_STAMP% Starting %%i on %%j >> %TIMETRAC_FILE%
@echo Calling StartServiceAndWait for %%i on %%j
call StartServiceAndWait %%j %%i
%TIME_STAMP% Starting %%i Done >> %TIMETRAC_FILE%
))
IF %MYDATE% == Wed (IF %%m == 1 (
%TIME_STAMP% Starting %%i on %%j >> %TIMETRAC_FILE%
@echo Calling StartServiceAndWait for %%i on %%j
call StartServiceAndWait %%j %%i
%TIME_STAMP% Starting %%i Done >> %TIMETRAC_FILE%
))
IF %MYDATE% == Thu (IF %%n == 1 (
%TIME_STAMP% Starting %%i on %%j >> %TIMETRAC_FILE%
@echo Calling StartServiceAndWait for %%i on %%j
call StartServiceAndWait %%j %%i
%TIME_STAMP% Starting %%i Done >> %TIMETRAC_FILE%
))
IF %MYDATE% == Fri (IF %%o == 1 (
%TIME_STAMP% Starting %%i on %%j >> %TIMETRAC_FILE%
@echo Calling StartServiceAndWait for %%i on %%j
call StartServiceAndWait %%j %%i
%TIME_STAMP% Starting %%i Done >> %TIMETRAC_FILE%
))
IF %MYDATE% == Sat (IF %%p == 1 (
%TIME_STAMP% Starting %%i on %%j >> %TIMETRAC_FILE%
@echo Calling StartServiceAndWait for %%i on %%j
call StartServiceAndWait %%j %%i
%TIME_STAMP% Starting %%i Done >> %TIMETRAC_FILE%
))
IF %MYDATE% == Sun (IF %%q == 1 (
%TIME_STAMP% Starting %%i on %%j >> %TIMETRAC_FILE%
@echo Calling StartServiceAndWait for %%i on %%j
call StartServiceAndWait %%j %%i
%TIME_STAMP% Starting %%i Done >> %TIMETRAC_FILE%
))
)
就个人而言,我会把
(
%TIME_STAMP% Starting %%i on %%j >> %TIMETRAC_FILE%
@echo Calling StartServiceAndWait for %%i on %%j
call StartServiceAndWait %%j %%i
%TIME_STAMP% Starting %%i Done >> %TIMETRAC_FILE%
)
进入一个单独的批处理文件并调用它,这样它就不会在批处理文件中重复七次。
这可能是一种更干净的方式,但这就是你在NYE上发布问题的方法。 :)
答案 2 :(得分:0)
如果您的%date%
变量中嵌入了该日期(这取决于区域和用户设置),请尝试以下操作:
set "skip="
echo %date%|find /i "sat" >nul && set skip=1
echo %date%|find /i "sun" >nul && set skip=1
if not defined skip (call "your batch file to change services.bat") else (goto :weekend)