2014-12-31 39 views
0

我有一个windows批处理文件,它调用另一个文件Services,它具有需要重新启动的服务和机器的列表,但其中一个服务不需要启动周末。有谁知道我可以如何在服务文件中包含%dow%函数然后调用基于dow的服务? PS - 它调用另一个批处理文件STOPANDWAIT,它确保服务尚未运行。在/ F语句的批处理文件中加入dow

这里是我的代码:

: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%

预先感谢您!

谢谢!

回答

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 

,你DayNames中/数字/不管是上,做了线不是包含逗号。按照.INI文件中的样式,我将它们放在括号中以使它们变得明显。

注:如果您在文件(上升到第[DAYNAME]线)的起点设置runtoday最初是空的,过程将运行。如果您最初将其设置为非空,则每行将运行,直到遇到[dayname]行,并开启审查。

+0

喜@Magoo - 非常感谢你的帮助。当我运行这一点,我的批处理说ELSE不被视为一个有效的命令,我失败了。我的服务文件是非常简单的,现在看起来是这样的:周一周二周三周四周五] “EMSXComplianceService”,\\ bosxiptest **哪里有服务,服务器**这种做法是非常接近我所期待的,如果我可以调整它,我会做。再次感谢你的帮助! –

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 

你的循环会是这个样子:

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上发布问题的方法。:)

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)