@echo off
setlocal
REM ==========================
REM サービス表示名
set DISPLAY_NAME=
REM サービス名
set SERVICE_NAME=
REM サービスの起動状態
set SERVICE_STAT=
REM ==========================
set DISPLAY_NAME="Windows Time"
call :GET_SERVICE_NAME
call :GET_SERVICE_STAT
call :DISPLAY_STATUS
REM --------------------------
set DISPLAY_NAME="Windows Update"
call :GET_SERVICE_NAME
call :GET_SERVICE_STAT
call :DISPLAY_STATUS
REM --------------------------
set DISPLAY_NAME="Themes"
call :GET_SERVICE_NAME
call :GET_SERVICE_STAT
call :DISPLAY_STATUS
REM --------------------------
set DISPLAY_NAME="Windows Search"
call :GET_SERVICE_NAME
call :GET_SERVICE_STAT
call :DISPLAY_STATUS
REM --------------------------
goto END
REM ==========================
::: サービス表示名を元にサービス名を取得
:::
::: 必要な環境変数
::: DISPLAY_NAME
::: 設定される環境変数
::: SERVICE_NAME
:::
REM --------------------------
:GET_SERVICE_NAME
set SERVICE_NAME=
if not defined DISPLAY_NAME exit /b 1
set CMD=sc getkeyname %DISPLAY_NAME%
for /f "usebackq tokens=1,2,3" %%a in (`%CMD%`) do (
REM echo DEBUG: a=%%a b=%%b c=%%c
if "名前" == "%%a" (
set SERVICE_NAME=%%c
)
)
if not defined SERVICE_NAME (
REM サービス名が取得できなければエラー
echo ERROR: サービス名の取得に失敗しました(%DISPLAY_NAME%)
exit /b 1
)
exit /b 0
REM ==========================
::: サービス名からサービスの状態を取得
:::
::: 必要な環境変数
::: SERVICE_NAME
::: 設定される環境変数
::: SERVICE_STAT
:::
REM --------------------------
:GET_SERVICE_STAT
set SERVICE_STAT=
if not defined SERVICE_NAME exit /b 1
set CMD=sc query %SERVICE_NAME%
for /f "usebackq tokens=1,2,3,4" %%a in (`%CMD%`) do (
REM echo DEBUG: a=%%a b=%%b c=%%c d=%%d
if "STATE" == "%%a" (
set SERVICE_STAT=%%d
)
)
if not defined SERVICE_STAT (
REM 状態が取得できなければエラー
echo ERROR: サービスの状態取得に失敗しました(%SERVICE_NAME%)
exit /b 1
)
exit /b 0
REM ==========================
::: 取得したサービスの状態を表示
:::
::: 必要な環境変数
::: DISPLAY_NAME
::: SERVICE_STAT
::: 設定される環境変数
::: なし
:::
REM --------------------------
:DISPLAY_STATUS
if not defined DISPLAY_NAME (
echo ERROR: サービス表示名が設定されていません
exit /b 1
)
REM カラーのため設定
for /f %%i in ('cmd /k prompt $e^<nul') do set ESC=%%i
if defined SERVICE_STAT (
REM %変数:~1,-1%は最初と最後の1文字を除いて展開する
if %SERVICE_STAT% == RUNNING (
REM 緑字
echo %DISPLAY_NAME:~1,-1% (%SERVICE_NAME%^) [%ESC%[92m%SERVICE_STAT%%ESC%[0m^]
) else (
REM 赤字
echo %DISPLAY_NAME:~1,-1% (%SERVICE_NAME%^) [%ESC%[91m%SERVICE_STAT%%ESC%[0m^]
)
) else (
REM %変数:~1,-1%は最初と最後の1文字を除いて展開する
echo %DISPLAY_NAME:~1,-1% ^(%SERVICE_NAME%^) ^[ UNKNOWN ^]
)
exit /b 0
REM ==========================
::: バッチ終了処理
REM --------------------------
:END
echo.
pause
REM --------------------------
endlocal
exit /b 0
PR