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

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

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

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

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

解決済

バッチファイルにおいて、指定したelse if文に条件を走らせたい。

tamtam0423
tamtam0423

総合スコア21

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

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

1回答

0評価

0クリップ

268閲覧

投稿2022/06/08 10:14

編集2022/06/11 10:19

こんばんは

batファイルのif文の処理について質問がございます。
MECMクライアントのバージョンに応じて、分岐を加えておりますが、想定した挙動を見せません。
想定しているゴールと、現在の状況、実施したことを記載しております。
恐れ入りますが、ご回答いただけると幸いです。

■想定しているゴール(挙動)
1909バージョンのMECMクライアント(5.00.9012.1020)が導入されたPCでスクリプト実行後、
分岐の処理が”else if !mainNumber! EQU %NewMECM1909%”に走り、処理が終わること

■現在の状況
1909バージョンのMECMクライアント(5.00.9012.1020)が導入されたPCでスクリプト実行後、
分岐の処理が”else if !mainNumber! GEQ %NewMECM1909%”に走ってしまう。

■実施したこと
”else if !mainNumber! EQU %NewMECM1909%”の変数を以下に変更し、再実行を試みました。
結果を以下にそれぞれ記載します。

”else if !mainNumber! == %NewMECM1909%”
→現在の状況と変わらず

”else if !mainNumber! NEQ %NewMECM1909%”
→想定しているゴールの挙動をみせる

本件で回答いただいた遅延環境変数の宣言を実施
”setlocal enabledelayedexpansion”

EQUからNEQに変更したことで想定している挙動を見せたため、バージョン番号の切り抜きとPowershellのCurrent Versionとの参照がうまく実施されていないと考えたため、バージョン切り抜きを使用せずにスクリプトを流したりしましたが、結果は変わらず。
ほかに対処がないかをWeb検索で調査したものの、有用がものは見つからず。

---以下コード---

batfile

@echo off chcp 65001 cd /d %~dp0 echo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX echo X echo X 古いSCCMクライアントを削除します echo X echo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX pause rem 1909バージョン判定 set MECM1909Chk= 5.00.9012.1020 rem 2111バージョン判定 set MECM2111Chk= 5.00.9068.1000 rem バージョン番号抜粋 set NewMECM1909=%MECM1909Chk:~5,4% set NewMECM2111=%MECM2111Chk:~5,4% rem SCCMクライアントバージョン確認スクリプト(Powershell) set PSCommand=powershell -NoProfile -ExecutionPolicy RemoteSigned -Command "& { (Get-WMIObject -Namespace root\ccm -Class SMS_Client).ClientVersion }" rem SCCMクライアントのサービス確認 sc query CcmExec > nul if not %errorlevel%==0 ( rem SCCMクライアント無し echo. echo SCCMクライアントは既に削除されています。次のBATを実行してください。 echo. pause goto _EXIT ) else ( rem SCCMクライアント有り echo. echo SCCMクライアントのバージョンを確認しています… echo. REM 遅延環境変数の宣言------------------------------------ setlocal enabledelayedexpansion for /f "usebackq" %%i in (`%PSCommand%`) do ( set versionNumber=%%i set mainNumber=!versionNumber:~5,4! if not "!versionNumber:~0,5!"=="5.00." ( echo. echo SCCMクライアントバージョンが想定外の値になっています。 echo SCCMクライアント:!versionNumber! echo 処理を停止します。 echo. pause goto _EXIT ) else if !mainNumber! EQU %NewMECM1909% ( rem !mainNumber! = %NewMECM1909% rem A環境のMECMと同様のバージョンです echo. echo MECMクライアント:!versionNumber! echo A環境のMECMと同様のバージョンです。次のBATを実行してください。 echo. pause goto _EXIT ) else if !mainNumber! == %NewMECM2111% ( rem !mainNumber! = %NewMECM2111% rem MECMバージョンが、2111になっています echo. echo MECMクライアント:!versionNumber! echo サポート内のバージョンのため、次のBATを実行してください。 echo. pause goto _EXIT ) else if !mainNumber! GEQ %NewMECM1909% ( rem !mainNumber! >= %NewMECM1909% rem 現SCCMバージョンが、対応バージョン以上です echo. echo SCCMクライアント:!versionNumber! echo SCCMクライアントは既に最新です。次のBATを実行してください。 echo. pause goto _EXIT ) else if !mainNumber! LSS %NewMECM1909% ( rem !mainNumber! < %NewSCCM% rem 現SCCMバージョンが、対応バージョンよりも小さい echo. echo SCCMクライアント:!versionNumber! echo SCCMクライアントを削除します。 echo. pause rem ----以下はテスト用にコメ書きで停止している---- rem *************ここから************* rem start _\SCCMuninst.bat rem *************ここまで************* rem ----上記コマンドはテスト終了後コメント消す---- goto _EXIT ) else ( echo. echo 想定外エラーです。処理を停止します。 echo. pause goto _EXIT ) endlocal ) ) :FORIGN :_EXIT

Powershell実行結果(Get-WMIObject -Namespace root\ccm -Class SMS_Client)

Powershell

※Current Version以外マスクさせていただきます。 __GENUS : -------- __CLASS : -------- __SUPERCLASS :-------- __DYNASTY :-------- __RELPATH : -------- __PROPERTY_COUNT :-------- __DERIVATION :-------- __SERVER :-------- __NAMESPACE :-------- __PATH :-------- AllowLocalAdminOverride :-------- ClientType :-------- ClientVersion : 5.00.9012.1020 EnableAutoAssignment :-------- PSComputerName :--------

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

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