質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

2回答

4878閲覧

バッチファイルを用いてSymantec Endpoint Protectionをアンインストールし、新しいセキュリティソフトをインストールしたい

Kusabi5928

総合スコア0

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2021/07/19 11:57

バッチファイルを用いて、OSがWindows 10のPCからSymantec Endpoint Protection(以下SEP)を
アンインストール(できればサイレントで)して、新しいセキュリティソフトをインストールしたいです。
作業の順番としては先に新しいソフトを入れてからSEPをアンインストールしたいと考えています。

色々と検索しながらプロトタイプを作りましたが、改善したい部分が複数ございます。
作成したプロトタイプは以下の通りです。

bat

1@echo off 2 3set MYDIR=%~dp0 4 5rem 新しいソフトが稼働しているか確認 6 7sc qc "○○○○" >nul 8if not errorlevel 1 ( 9 goto no_install 10) else ( 11 goto newsoft_install 12) 13 14:no_install 15echo ○○○○は既にインストール済みです。 16timeout /t 3 /nobreak > nul 17echo. 18goto SEP_confirmation 19 20 21:SEP_confirmation 22rem SEPが稼働しているか確認 23 24sc qc "SISIPSService" >nul 25if not errorlevel 1 ( 26 goto SEP_exist 27) else ( 28 goto SEP_not_exist 29) 30 31 32:SEP_exist 33echo Symantec Endpoint Protectionがインストールされています。 34timeout /t 3 /nobreak > nul 35echo. 36goto SEP_uninstall 37 38 39:SEP_not_exist 40echo Symantec Endpoint Protectionはインストールされていません。 41timeout /t 3 /nobreak > nul 42echo. 43goto End 44 45 46:SEP_uninstall 47echo Symantec Endpoint Protectionをアンインストールします。 48timeout /t 3 /nobreak > nul 49echo. 50 51 52set Soft=Symantec Endpoint Protection 53if "%PROCESSOR_ARCHITECTURE%"=="x86" goto x86 54reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall" /s | find "DisplayName" | find "%Soft%">nul 55if %errorlevel% equ 0 ( 56 set Regpath1=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall 57 goto START 58) else ( 59 reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" /s | find "DisplayName" | find "%Soft%">nul && ( 60 set Regpath1=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall 61 goto START 62 ) 63) 64 65:x86 66reg query "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall" /s | find "DisplayName" | find "%Soft%">nul 67if %errorlevel% equ 0 ( 68 set Regpath1=HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall 69) else ( 70 echo Application Program not found 71 exit /b 72) 73 74:START 75for /f "delims=[]" %%i in ('reg query "%Regpath1%" /s ^| findstr "%Regpath1% DisplayName %Soft%" ^| find /n /v "" ^| find "DisplayName" ^| find "%Soft%"') do ( 76 set /a cnt=%%i-1 77) 78 79:LOOP 80for /f "tokens=1* delims=[] " %%b in ('reg query %Regpath1% /s ^| findstr "%Regpath1% DisplayName %Soft%" ^| find /n /v "" ^| findstr /r "^[%cnt%]"') do ( 81 echo %%c | find "%Regpath1%">nul && ( 82 set Regpath2=%%c 83 goto SUB 84 ) 85) 86set /a cnt-=1 87goto LOOP 88 89:SUB 90for /f "tokens=2*" %%a in ('reg query "%Regpath2%" ^| find "UninstallString"') do ( 91 set UIS=%%b 92) 93rem --- %UIS% に、UninstallString値が入っている。 --- 94 95msiexec /x %UIS:~14% /passive SYMREBOOT=ReallySuppress REMOVE=ALL 96 97 98rem SEPが稼働しているか確認 99 100sc qc "SISIPSService" >nul 101if not errorlevel 1 ( 102 goto uninstall_failed 103) else ( 104 goto uninstall_successful 105) 106 107 108:uninstall_failed 109echo Symantec Endpoint Protectionはアンインストールされていません。 110timeout /t 3 /nobreak > nul 111echo. 112goto End 113 114 115:uninstall_successful 116echo Symantec Endpoint Protectionはアンインストールされました。 117timeout /t 3 /nobreak > nul 118echo. 119goto End 120 121 122:newsoft_install 123echo ○○○○をインストールします。 124timeout /t 3 /nobreak > nul 125echo. 126 127 128rem インストーラの存在を確認 129 130if not exist %MYDIR%\○○○○.exe ( 131 goto no_exe 132) else ( 133 goto yes_exe 134) 135 136 137:no_exe 138echo 同じフォルダにインストーラがありません。 139timeout /t 3 /nobreak > nul 140echo. 141goto End 142 143:yes_exe 144rem 新しいソフトをサイレントインストール 145 146%MYDIR%\○○○○.exe /install /quiet /norestart 147 148 149rem 新しいソフトが稼働しているか確認 150 151sc qc "○○○○" >nul 152if not errorlevel 1 ( 153 goto install_successful 154) else ( 155 goto install_failed 156) 157 158 159:install_successful 160echo 新しいソフトがインストールされました。 161timeout /t 3 /nobreak > nul 162echo. 163goto SEP_uninstall 164 165 166:install_failed 167echo 新しいソフトはインストールされていません。 168timeout /t 3 /nobreak > nul 169echo. 170 171 172 173 174:End 175echo batを終了します。 176timeout /t 3 /nobreak > nul

改善したい部分は2点ございます。

  1. sc qcではなく、sc queryでRUNNING状態か否かで分岐させるようにしたい
  2. バッチファイルを置いているのと同じフォルダ内に実行結果を出力したい

以上2点について色々と検索してみたのですが、どこをどう変えればいいのかよく分かりませんでした。
どなたか知恵をお貸しください。

(以下は可能であれば)
最初はSEPをサイレントでアンインストールしたくてmsiexecの行に/qnや/quietを付けてみたのですが
一向にアンインストールされず、やむを得ず現状の無人モード(/passive)で記述したところ、無事に
アンインストールが進みました。
いくら調べてもなぜ/qnや/quietではダメだったのか、どうすればよかったのかが分かりませんでした。
もしこれの解決方法をご存知の方がいれば、ご教示いただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

forを使わなくとも

sc qc "○○○○" >nul ⇒ sc query "○○○○" | findstr STATE | findstr RUNNING > nul

の置き換えで解決いたしました。

投稿2021/07/27 05:24

Kusabi5928

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

sc qcではなく、sc queryでRUNNING状態か否かで分岐させるようにしたい

forを使う。

【Windowsバッチ】コマンド実行結果を環境変数に代入する方法
※他にも参考になるサイトはたくさんあると思うけど一例。

バッチファイルを置いているのと同じフォルダ内に実行結果を出力したい

echoの内容を逐次>>を使ってファイルにリダイレクトするか、このバッチそのものをxxx.bat > log.txtみたいな形で出力をファイルにリダイレクトする。

どっちにするかは細かい要求によって変わるかもしれないけど、いずれにせよ>>>の使い方がわかってれば悩まないと思う。

投稿2021/07/19 12:10

gentaro

総合スコア8947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kusabi5928

2021/07/20 03:02

すみません、スクリプト作成に関してはド素人なもので、sc queryのforを使う書き方を教えていただけないでしょうか?
gentaro

2021/07/20 07:15

ググるための情報は上記回答で十分示してあるんで、自分で調べて試してみてから何がわからないのか具体的に質問するようにして。
gentaro

2021/07/20 07:17

そもそもコマンドプロンプトでfor /?で詳細な使い方のヘルプが出る。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問