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

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

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

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

バッチファイル

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

Q&A

解決済

1回答

1043閲覧

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

tamtam0423

総合スコア23

Windows

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

バッチファイル

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

0グッド

0クリップ

投稿2022/06/08 10:14

編集2022/06/10 18:29

こんばんは

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

1@echo off 2chcp 65001 3 4cd /d %~dp0 5 6echo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7echo X 8echo X 古いSCCMクライアントを削除します 9echo X 10echo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 11 12pause 13 14rem 1909バージョン判定 15set MECM1909Chk= 5.00.9012.1020 16 17rem 2111バージョン判定 18set MECM2111Chk= 5.00.9068.1000 19 20rem バージョン番号抜粋 21set NewMECM1909=%MECM1909Chk:~5,4% 22set NewMECM2111=%MECM2111Chk:~5,4% 23 24rem SCCMクライアントバージョン確認スクリプト(Powershell) 25set PSCommand=powershell -NoProfile -ExecutionPolicy RemoteSigned -Command "& { (Get-WMIObject -Namespace root\ccm -Class SMS_Client).ClientVersion }" 26 27rem SCCMクライアントのサービス確認 28sc query CcmExec > nul 29 30if not %errorlevel%==0 ( 31 32 rem SCCMクライアント無し 33 echo. 34 echo SCCMクライアントは既に削除されています。次のBATを実行してください。 35 echo. 36 pause 37 goto _EXIT 38 39) else ( 40 41 rem SCCMクライアント有り 42 echo. 43 echo SCCMクライアントのバージョンを確認しています… 44 echo. 45 46REM 遅延環境変数の宣言------------------------------------ 47 setlocal enabledelayedexpansion 48 49for /f "usebackq" %%i in (`%PSCommand%`) do ( 50 51 set versionNumber=%%i 52 set mainNumber=!versionNumber:~5,4! 53 54 if not "!versionNumber:~0,5!"=="5.00." ( 55 56 echo. 57 echo SCCMクライアントバージョンが想定外の値になっています。 58 echo SCCMクライアント:!versionNumber! 59 echo 処理を停止します。 60 echo. 61 pause 62 goto _EXIT 63 64 ) else if !mainNumber! EQU %NewMECM1909% ( 65 66 rem !mainNumber! = %NewMECM1909% 67 rem A環境のMECMと同様のバージョンです 68 69 echo. 70 echo MECMクライアント:!versionNumber! 71 echo A環境のMECMと同様のバージョンです。次のBATを実行してください。 72 echo. 73 pause 74 goto _EXIT 75 76 ) else if !mainNumber! == %NewMECM2111% ( 77 78 rem !mainNumber! = %NewMECM2111% 79 rem MECMバージョンが、2111になっています 80 81 echo. 82 echo MECMクライアント:!versionNumber! 83 echo サポート内のバージョンのため、次のBATを実行してください。 84 echo. 85 pause 86 goto _EXIT 87 88 ) else if !mainNumber! GEQ %NewMECM1909% ( 89 90 rem !mainNumber! >= %NewMECM1909% 91 rem 現SCCMバージョンが、対応バージョン以上です 92 93 echo. 94 echo SCCMクライアント:!versionNumber! 95 echo SCCMクライアントは既に最新です。次のBATを実行してください。 96 echo. 97 pause 98 goto _EXIT 99 100 ) else if !mainNumber! LSS %NewMECM1909% ( 101 102 rem !mainNumber! < %NewSCCM% 103 rem 現SCCMバージョンが、対応バージョンよりも小さい 104 105 echo. 106 echo SCCMクライアント:!versionNumber! 107 echo SCCMクライアントを削除します。 108 echo. 109 pause 110 111 rem ----以下はテスト用にコメ書きで停止している---- 112 rem *************ここから************* 113 114 rem start _\SCCMuninst.bat 115 116 rem *************ここまで************* 117 rem ----上記コマンドはテスト終了後コメント消す---- 118 119 goto _EXIT 120 121 ) else ( 122 123 echo. 124 echo 想定外エラーです。処理を停止します。 125 echo. 126 pause 127 goto _EXIT 128 129 ) 130 endlocal 131 ) 132 133) 134 135:FORIGN 136 137:_EXIT 138 139

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

Powershell

1※Current Version以外マスクさせていただきます。 2 3__GENUS : -------- 4__CLASS : -------- 5__SUPERCLASS :-------- 6__DYNASTY :-------- 7__RELPATH : -------- 8__PROPERTY_COUNT :-------- 9__DERIVATION :-------- 10__SERVER :-------- 11__NAMESPACE :-------- 12__PATH :-------- 13AllowLocalAdminOverride :-------- 14ClientType :-------- 15ClientVersion : 5.00.9012.1020 16EnableAutoAssignment :-------- 17PSComputerName :--------

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

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

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

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

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

guest

回答1

0

ベストアンサー

setlocal enabledelayedexpansionをお忘れなのでは?

動作確認したコード

batch

1@echo off 2set MECM2103Chk=5.00.9049.1000 3set NewMECM2103=%MECM2103Chk:~5,4% 4setlocal enabledelayedexpansion 5for /f "usebackq" %%i in (`type test.txt`) do ( 6 set versionNumber=%%i 7 set mainNumber=!versionNumber:~5,4! 8 echo !mainNumber! %NewMECM2103% 9 if "!mainNumber!" EQU "%NewMECM2103%" ( 10 echo matched 11 ) 12)

test.txt

15.00.9012.1010 25.00.9058.1000 35.00.9049.1000 49.99.9999.9999

実行結果:
9012 9049
9058 9049
9049 9049
matched
9999 9049

投稿2022/06/08 11:10

編集2022/06/08 13:55
itagagaki

総合スコア8402

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

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

tamtam0423

2022/06/08 12:35

ご回答ありがとうございます。 setlocal enabledelayedexpansion をif文の上部にセットして、バッチファイル実行してみます。 ※今手が離せないので、後で実施します。。
tamtam0423

2022/06/08 13:32

ご案内いただいた通り、最上部「setlocal enabledelayedexpansion」、最下部に「endlocal」を記述しコマンド実行しましたが状況変わらずでした。 一旦は状況のご報告になります。
itagagaki

2022/06/08 13:57

動作確認したコードを回答に追記しました。参考にしてください。
tamtam0423

2022/06/09 08:24

色々とご対応いただきありがとうございました。 setlocal enabledelayedexpansionをif文の直前に記載したところ、想定した挙動を見せました。 やはり、ご指摘の通り、setlocal enabledelayedexpansionの記述漏れが原因でした。
tamtam0423

2022/06/10 18:20 編集

前回はご回答まことにありがとうございました。 追加で質問事項が出てきましたので、ステータスを受付中としたいため、ベストアンサーから外させていただきました。 こちらの知識不足で大変申し訳ございません。
itagagaki

2022/06/11 01:01

別の質問が生じたのなら新しい質問にするべきです。
tamtam0423

2022/06/11 01:19

承知しました。 削除リクエストも反映されてない為、連投と取られないか?を懸念しましたが、気にせず新規で質問あげます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問