Tôi đã làm việc để cải thiện tập tin lô này. Mục tiêu của tôi là cho nó dừng dịch vụ đầu tiên trong danh sách và đợi cho đến khi nó dừng hoàn toàn hoặc giết nó nếu nó không dừng nhanh, sau đó khởi động lại và đợi cho đến khi dịch vụ được khởi động hoàn toàn trước khi dừng dịch vụ tiếp theo trong danh sách.
Như trong ví dụ này, đầu tiên nó ghi tên của từng dịch vụ vào một tệp, sau đó đọc chúng. Nên đặt chúng vào %% một trường nhưng thay vào đó, nó đặt Service_% a làm tên của dịch vụ và sau đó không thành công.
Làm thế nào tôi có thể thay đổi nó để nó đọc đúng tên?
@ECHO OFF
SETLOCAL EnableDelayedExpansion
ECHO ---------------------------------------------->> log.txt
ECHO -----------========================----------->> log.txt
ECHO -----------=========%date%=========----------->> log.txt
ECHO -----------========================----------->> log.txt
ECHO ---------------------------------------------->> log.txt
set DD=0
Set TIMESTAMP="eol=; tokens=1,2,3,4* delims=/, "
For /F %TIMESTAMP% %%i in ('DATE /t') DO (
SET YYYYMMDD=%%l%%j%%k
SET YYYYMM=%%l%%j
set DD=%%k
)
echo 3050 >> services
echo 3051 >> services
echo 3052 >> services
for /f %%a in (services) do (
set timestamp=!date!!time!
ECHO !timestamp! - Stopping Service %%a >> log.txt
sc stop Service_%%a >> log.txt
timeout /t 15 > NUL
for /f "tokens=4" %%s in ('sc query "Service_%%a" ^| find "STATE"') do if NOT "%%s"=="STOPPED" goto ForceStop
goto Start
:ForceStop
ECHO !timestamp! - Service could not be stopped, forcing... >> log.txt
taskkill /f /im Service_%%a.exe >> log.txt
:Start
ECHO !timestamp! - Service is stopped >> log.txt
timeout /t 5 > NUL
set timestamp=!date!!time!
ECHO !timestamp! - Starting Service %%a >> log.txt
sc start "Service_%%a" >> log.txt
:WAIT
ECHO !timestamp! - Service not yet started >> log.txt
timeout /t 5 > NUL
for /f "tokens=4" %%s in ('sc query "Service_%%a" ^| find "STATE"') do if NOT "%%s"=="RUNNING" goto WAIT
ECHO !timestamp! - Service is started >> log.txt
)
if exist services del services