다음 작업을 수행하는 배치 파일을 작성하고 싶습니다.
- 서비스가 실행 중인지 확인
- 실행 중이면 배치를 종료하십시오.
- 실행 중이 아니면 서비스를 시작하십시오.
지금까지 검색 한 코드 샘플이 작동하지 않는 것으로 밝혀져 게시하지 않기로 결정했습니다.
서비스 시작은 다음을 통해 수행됩니다.
net start "SERVICENAME"
- 서비스가 실행 중인지 확인하고 배치 파일에서 if 문을 만드는 방법은 무엇입니까?
- 조금 혼란 스러워요. 넷 스타트에 전달해야하는 주장은 무엇입니까? 서비스 이름 또는 표시 이름?
답변
서비스 상태를 확인하려면을 사용하십시오 sc query <SERVICE_NAME>
. 배치 파일의 if 블록에 대해서는 문서를 확인하십시오 .
다음 코드는 서비스의 상태를 확인하고 MyServiceName
실행 중이 아니면 시작합니다 (서비스가 실행 중이 아니면 if 블록이 실행 됨).
for /F "tokens=3 delims=: " %%H in ('sc query "MyServiceName" ^| findstr " STATE"') do (
if /I "%%H" NEQ "RUNNING" (
REM Put your code you want to execute here
REM For example, the following line
net start "MyServiceName"
)
)
그것이하는 일에 대한 설명 :
- 서비스의 속성을 쿼리합니다.
- “STATE”텍스트가 포함 된 줄을 찾습니다.
- 해당 라인을 토큰 화하고 서비스 상태를 포함하는 세 번째 토큰을 꺼냅니다.
- 문자열 “RUNNING”에 대해 결과 상태를 테스트합니다.
두 번째 질문에 관해서는, 당신이 전달하려는 것 인수는 net start
서비스 이름입니다 하지 표시 이름.
답변
서비스를 전환하려면 다음을 사용하십시오.
NET START “분산 트랜잭션 코디네이터”|| NET STOP “분산 트랜잭션 코디네이터”
답변
다음 명령을 사용하여 서비스가 실행 중인지 여부를 확인할 수 있습니다.
sc query [ServiceName] | findstr /i "STATE"
NOD32 Antivirus를 실행하면 다음과 같은 결과가 나타납니다.
STATE : 4 RUNNING
중지 된 경우 다음과 같이 표시됩니다.
STATE : 1 STOPPED
이를 변수에 사용하여 NET START를 사용할지 여부를 결정할 수 있습니다.
서비스 이름은 표시 이름이 아닌 서비스 이름이어야합니다.
답변
그렇게해야합니다.
FOR %%a IN (%Svcs%) DO (SC query %%a | FIND /i "RUNNING"
IF ERRORLEVEL 1 SC start %%a)
답변
언어 독립적 버전.
@Echo Off
Set ServiceName=Jenkins
SC queryex "%ServiceName%"|Find "STATE"|Find /v "RUNNING">Nul&&(
echo %ServiceName% not running
echo Start %ServiceName%
Net start "%ServiceName%">nul||(
Echo "%ServiceName%" wont start
exit /b 1
)
echo "%ServiceName%" started
exit /b 0
)||(
echo "%ServiceName%" working
exit /b 0
)
답변
방금이 스레드를 찾았고 사용자가 배치 파일을 사용하여 서비스를 다시 시작하지 않으려는 경우 토론에 추가하고 싶었습니다. Windows에는 서비스, 서비스 속성, 복구로 이동하는 옵션이 있습니다. 여기에서 서비스에 대한 매개 변수를 설정할 수 있습니다. 서비스가 중지되면 서비스를 다시 시작합니다. 또한 컴퓨터를 다시 시작할 때와 다른 작업을 두 번째 실패로 시도 할 수도 있습니다.
답변
Cuando se는 Windows en Español, el código debe quedar asi를 사용합니다 (스페인어로 Windows를 사용하는 경우 코드는 다음과 같습니다).
for /F "tokens=3 delims=: " %%H in ('sc query MYSERVICE ^| findstr " ESTADO"') do (
if /I "%%H" NEQ "RUNNING" (
REM Put your code you want to execute here
REM For example, the following line
net start MYSERVICE
)
)
Reemplazar MYSERVICE con el nombre del servicio que se desea procesar. Puedes ver el nombre del servicio viendo las propiedades del servicio. (MYSERVICE를 처리 할 서비스 이름으로 바꾸십시오. 서비스 속성에서 서비스 이름을 볼 수 있습니다.)