
No.2ベストアンサー
- 回答日時:
文字列の、"Service Pack "とそれ以降のスペースの間を
切り出すようにしてみました。
1文字ずつループしながら比較してます(笑)。
その関係で、環境変数の遅延展開が必須です。
cmd /v:on の状態でないと正しく動きません。
なんだかすごく遠回りしてるような気がしてます。
WSH とか VBS とかを使えば簡単に済むような気がヒシヒシと(笑)。
@echo off
setlocal
:/ 環境変数の遅延展開が有効かどうか調べる
set b=hogehoge
if not !b!==hogehoge echo cmd /v:on の状態で実行してください & goto exit
:/ systeminfo コマンドの実行結果から "OS バージョン:" で始まる行を
:/ 環境変数 OSVER にセット
set OSVER=UNKNOWN
for /F "usebackq tokens=* delims=Service" %%I in (`"systeminfo 2>nul | findstr /B /L /C:"OS バージョン:""`) do set OSVER=%%I
if "%OSVER%"=="UNKNOWN" (
set SPVER=UNKNOWN
) else (
:/ OSVER から、"Service Pack " の文字列を検索するw
set nStart=0
set nLen=0
:/ 文字列長が 99 文字以下と仮定してるけど、ちゃんと数えるべきかも(どうやって?)
for /L %%I in (1,1,99) do (
:/ 13文字ぶんを大文字小文字無視で比較
if /i "!OSVER:~%%I,13!"=="service pack " (
:/ 見つかったら、その次からスペースを探す
set nStart=%%I
set /a nNext=%%I+13
for /L %%J in (!nNext!,1,99) do (
:/ "service pack " の頭から、見つかったスペースまでの間を切り出すww
:/ ほしいのは切り出す文字数
:/ 1回切り出したらそれまで
if !nLen! equ 0 (
if "!OSVER:~%%J,1!"==" " set /a nLen=%%J-%%I
:/ "service pack " から "ビルド" の間まで、とかwww
:/ if "!OSVER:~%%J,3!"=="ビルド" set /a nLen=%%J-%%I
)
)
)
)
)
:/ 開始位置と長さが求まったはずなので切り出す
set SPVER=UNKNOWN
:/ 開始位置がゼロでなければ("service pack "が見つかっていれば)
if !nStart! neq 0 (
if !nLen! equ 0 (
:/ 長さがゼロなら最後まで
set SPVER=!OSVER:~%nStart%!
) else (
:/ 長さがゼロでなければその長さ
set SPVER=!OSVER:~%nStart%,%nLen%!
)
)
:/ 条件に引っかからなければ UNKNWON のまま
echo SPVER=%SPVER%
if /i "%SPVER%"=="Service Pack 1" (
echo たぶんサービスパック1
) else if /i "%SPVER%"=="Service Pack 2" (
echo たぶんサービスパック2
) else (
echo サービスパック不明
)
:exit
endlocal
No.1
- 回答日時:
とりあえず、systeminfo の出力から
"OS バージョン:" を含む行を抜き出して、
その行の内容で条件判断する例です。
systeminfo と find を、FOR 文 の usebackq オプションで実行して、
その結果を環境変数にセットする、という方法です。
FOR を抜けると、OSVER 環境変数に、1行丸ごと
OS バージョン: 5.1.2600 Service Pack 2 ビルド 2600
のように入ってきます。後はそのまま使ってもいいですし、
後ろ半分だけ抜き出すとちょっとカッコイイ(笑)。
もっとエレガントな方法があると思いますが一例として。
あと、ウチには SP2 しかないので、SP1 の場合に systeminfo が
どういう出力になるかは分からないので適当です。
@echo off
SET OSVER=UNKNOWN
:/ systeminfo コマンドの実行結果から "OS バージョン:" を含む行を抜き出す
:/ ただし、"BIOS バージョン:" の行は無視
:/ その行を、環境変数 OSVER にセット
for /F "usebackq delims=" %%I in (`"systeminfo 2>nul | find "OS バージョン:" | find /v "BIOS バージョン:" "`) do set OSVER=%%I
:/ 見つかっていれば、19 文字目以降を抜き出してセットし直す
if not "%OSVER%"=="UNKNOWN" set OSVER=%OSVER:~19%
if "%OSVER%"=="5.1.2600 Service Pack 1 ビルド 2600" (
echo たぶんサービスパック1
)
if "%OSVER%"=="5.1.2600 Service Pack 2 ビルド 2600" (
echo たぶんサービスパック2
)
if "%OSVER%"=="UNKNOWN" (
echo サービスパック不明
)
この回答への補足
サービスパック1の時は"5.1.2600 Service Pack 1 ビルド 2600"と表示ます。この2種類しかないならこの方法で決まりです。
可能であれば、文字列の位置指定ではなく"Service Pack 1"と"Service Pack 2"を変数に渡すことは出来ないもんでしょうか?ここまで完璧な方法を教えてもらっていて申し訳ないんですが。。。。位置指定で取得した場合この形式で表示されない場合判定条件がおかしくなってしまうので。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 新卒・第二新卒 就活 新卒 自己PR 強み 添削お願いします。 以下の文章で自己PRを書いてみたのですが、どこが競争 3 2023/02/25 21:27
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- オープンソース 素人です 1 2022/09/01 19:01
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- オープンソース Python openpyxlを使用したセル番地の使用について 1 2023/08/03 22:05
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- 法人税 法人 自家用車の事業使用について 2 2023/05/04 02:21
- JavaScript HTMLでJavaScriptを使用してプログラムを作ります。 入力されたパスワードを取得して、パス 2 2022/10/18 01:05
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチでテキストファイルから...
-
バッチファイルで昨日の日付を取得
-
バッチファイルでDirで取得した...
-
コマンドプロンプト標準出力と...
-
IPアドレスの第3オクテットだ...
-
子バッチ内のキー入力処理へ自...
-
コマンドプロンプト(バッチ)...
-
コマンドプロンプトで2ヶ月前3...
-
DOSのバッチで、変数中のファイ...
-
バッチファイル(for文)がうま...
-
バッチファイルで常に最新の現...
-
for文で空白行の文字列を変数に...
-
呼び出し元バッチを知るには?
-
DOSのバッチで、テキストファイ...
-
バッチファイルに日付(ミリ秒...
-
絶対パス名からファイル名を取...
-
バッチファイル ファイル内で改...
-
コマンドプロンプトでファイル...
-
Windowsのバッチで環境依存パス...
-
echoとsystem関数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチでテキストファイルから...
-
バッチファイルで昨日の日付を取得
-
バッチファイルでDirで取得した...
-
コマンドプロンプト標準出力と...
-
バッチファイルで常に最新の現...
-
DOSのバッチで、変数中のファイ...
-
子バッチ内のキー入力処理へ自...
-
VBアプリケーションで終了コー...
-
コマンドプロンプトで2ヶ月前3...
-
IPアドレスの第3オクテットだ...
-
バッチファイル テキストファイ...
-
コマンドプロンプト画面の閉じ...
-
コマンドプロンプト(バッチファ...
-
絶対パス名からファイル名を取...
-
コマンドプロンプト(バッチ)...
-
呼び出し元バッチを知るには?
-
コマンドプロンプトでファイル...
-
Excelで住所録を地域ごとに振り...
-
バッチファイルで2つ以上の変...
-
DOSのバッチで、テキストファイ...
おすすめ情報