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

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

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

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

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

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

Q&A

解決済

1回答

1130閲覧

if文の条件が想定通りの挙動をみせない。

tamtam0423

総合スコア23

Windows 10

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

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バッチファイル

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

0グッド

0クリップ

投稿2022/06/11 01:51

編集2022/06/11 02:56

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! GTR %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! GTR %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! < %NewMECM1909% 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実行結果
※下記のスクリプトで実行

set PSCommand=powershell -NoProfile -ExecutionPolicy RemoteSigned -Command "& { (Get-WMIObject -Namespace root\ccm -Class SMS_Client).ClientVersion }"

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ページで確認できます。

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

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

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

itagagaki

2022/06/11 02:19

> ”else if !mainNumber! GEQ %NewMECM1909%”に走る GEQ は greater or equal つまり「以上」であって、等しい場合も含むので、そこに走るのは当然なのでは。
tamtam0423

2022/06/11 02:59 編集

こちらにもご回答いただき、ありがとうございます。 そこには気付けませんでした。。 そうなると、GEQではなく、GTRで記述したほうが適切ですね。 %NewMECM2103%の数値は対象にしたくないので。 編集して、実行してみます。 11:43 GEQ→GTRに変更して、実行するも状況変化がありませんでした。 if文の間違っている個所は潰せたと思うので、あとは参照か定義している変数に誤りがあるかになりそうですかね。 抽出結果の確認は前回回答いただいた動作確認用のコードを応用して、確認しても抽出に問題はなさそうでしたが。 11:58 変数の数値を変更して、else if !mainNumber! LSS %NewMECM2103%が正常に動作するかの確認を実施。 正常に動作しました。
guest

回答1

0

ベストアンサー

set MECM1909Chk= 5.00.9012.1020

これだとMECM1909Chkの1文字目はスペース、2文字目が5になります。
コードが期待どおりに動かないときは、まずデータが想定通りか、順を追ってデバッグしましょう。

投稿2022/06/11 02:59

itagagaki

総合スコア8402

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問