2014-12-31 7 views
0

У меня есть пакетный файл Windows, который вызывает другой файл, Services, который имеет список служб и машин, которые необходимо перезагрузить, однако одна из этих служб не требуется запускать выходные. Кто-нибудь знает, как я могу включить функцию% dow% в файл Services, а затем вызвать службы на основе dow? PS - он вызывает другой пакетный файл STOPANDWAIT, который гарантирует, что службы еще не запущены.Включить dow в пакетный файл для/F-оператора

вот мой код:

: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") 
) 

Затем в% файле% УСЛУГИ,

[Mon] 
service1,runs,Monday 
service2,runs,Monday 
[Tue Fri] 
service3,runs,Tuesday and Friday 
service4,runs,Tuesday and Friday 

где вы daynames/цифры/независимо находятся на линии, что делает не содержит запятые. Я помещал их в скобки, чтобы сделать их очевидными, следуя стилю в файле .INI.

Примечание: Если вы установили runtoday изначально пустые, процессы в начале файла (до первой [DAYNAME] линии) будут не пробег. Если вы сначала установите его непустым, то каждая строка будет работать до тех пор, пока не появится строка [dayname], включив цензуру.

+0

Привет @Magoo - Большое вам спасибо за помощь. Я терпеть неудачу, когда я запускаю это, и моя партия говорит, что ELSE не распознается как действительная команда. Мой файл служб довольно прост, выглядит следующим образом: [Sun Mon Tue Wed Thu Fri] «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) 
Смежные вопросы