■環境
2003 リモート接続先サーバ
コマンドプロンプトの.batファイルとして使用します。
■目的
大目的:サービスが存在する場合、サービスを停止の後に削除する。その後、ある場合と無い場合共通のコマンドを流す。
小目的:サービスの検索結果をファイルに出力し、その中からサービスの名前の文字列検索をする。一致した場合、停止と削除コマンドを流す。
■困っている事
1.下記のコマンドを流した際、.batが途中で終わる。これはサービスの削除判定batを別のbatにしないと続行することができませんか?
2.下記のコマンドを流した際、:answer0と:answer1が両方とも出力されてしまいます。場合分けしたいのですが、修正や指摘をお願いします。
■コマンド
cmd
1@echo off 2set file=<出力先ファイル> 3sc qc <サービス名> >"%file%" 4 5rem 文字列検索 6set keyword=<サービス名> 7findstr %keyword% "%file%" > NUL 8GOTO answer%ERRORLEVEL% 9pause 10 11:answer0 12rem 検索文字列ありの場合 13echo サービスが既にあります。 14set /P STR_INPUT="既存のサービスをサービス一覧から削除します。削除しない場合、新しいサービスのインストールは行われません。インストールしてよろしいですか?(y/n): " 15IF "%STR_INPUT%" == "y" ( 16 echo "%STR_INPUT%:処理続行" 17 echo 既存のサービスを削除します。 18 echo サービスのスタートアップの種類を手動にします。 19 sc config <サービス名> start= demand 20 echo サービスを停止します。 21 sc Stop <サービス名> 22 echo サービスを削除します。 23 sc.exe delete <サービス名> 24) ELSE ( 25 echo "%STR_INPUT%:処理中止" 26 echo バッチファイルを停止します。 27 pause 28 exit 29) 30goto end 31exit /b 32 33:answer1 34rem 検索文字列無しの場合 or エラーが発生した場合 35echo サービスはありません。 36goto end 37 38:end 39rem 下にコマンドが続きますが、関係ないので割愛。 40 41endlocal 42pause
####追記
コマンドを一部修正しました。かなり省略してあります。
cmd
1GOTO answer%ERRORLEVEL% 2:answer0 3goto end 4:answer1 5goto end 6:end 7rem 残りのコマンド
にしてみて期待通りに動くようになりましたが、これで良かったのか不安です……。
以上、わかることがあればコメントをお願いします。

回答3件
あなたの回答
tips
プレビュー