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

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

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

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

解決済

2回答

2653閲覧

.vbs 比較演算の書き方

退会済みユーザー

退会済みユーザー

総合スコア0

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2017/10/11 03:15

編集2017/10/16 02:40

以下の

===
dim path
path="C:\Windows\System32....."
MsgBox GetVersion(path)

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんな感じでいかがでしょうか。

VBS

1dim path 2path="C:\Windows\System32\drivers\srv.sys" 3MsgBox GetVersion(path, "6.1.7601.23889") 4 5Function GetVersion(pathspec, basever) 6 Dim fso, temp 7 Set fso = CreateObject("Scripting.FileSystemObject") 8 temp = fso.GetFileVersion(pathspec) 9 10 ' バージョン情報なし 11 If Len(temp) = 0 Then 12 GetVersion = "バージョン情報がありません。" 13 Exit Function 14 End If 15 16 ' 分割して桁を揃えるように文字列化 17 v1 = Split(basever, ".") 18 v2 = Split(temp, ".") 19 v1str = Right("00" & v1(0), 2) & Right("00" & v1(1), 2) & Right("0000" & v1(2), 4) & Right("00000" & v1(3), 5) 20 v2str = Right("00" & v2(0), 2) & Right("00" & v2(1), 2) & Right("0000" & v2(2), 4) & Right("00000" & v2(3), 5) 21 22 ' 文字列化したバージョン同士で比較 23 If v1str <= v2str Then 24 GetVersion = "問題ありません。" 25 Else 26 GetVersion = "○○を適用してください。" 27 End If 28 29End Function

解説
試したところ、取得できたバージョン情報は6.1.7601.23889のような値でした。
各桁数が環境によって揃っているとは限らないので、単純な比較はできません。
そこで一旦ドット単位で分割した後、桁を揃えるように文字列化しています。
つまり6.1.7601.23889でも1.1.1.1でも以下のような文字列になります。
06.01.7601.23889
01.01.0001.00001
こうすることで単純にIf文で比較ができるようになります。
各桁数は現状固定で、2,2,4,5 としてありますので、もし不都合があるようなら適宜修正してください。

投稿2017/10/11 04:45

ttyp03

総合スコア16998

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

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

退会済みユーザー

退会済みユーザー

2017/10/13 02:57

わかりやすく、ありがとうございます。
guest

0

以下参考に。
Hey, Scripting Guy! インストール済みのデバイス ドライバのリストを取得する方法はありますか
ビデオコントローラのドライバを取得する: Win32_VideoController - WMI Sample (VBS)
※どのドライバーを取得するかは.ExecQuery("Select * from XXXX")のXXXXで指定するようです。

また、ドライバーのバージョン自体は文字列だと思われるので以下のように分割して比較する必要があるかもしれません。

VBS

1for i=1 to Ubound(split(oObj.DriverVersion,".")) 2 if split(oObj.DriverVersion,".")(i) ="XXXX" then 3next

投稿2017/10/11 04:56

sazi

総合スコア25195

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

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

退会済みユーザー

退会済みユーザー

2017/10/13 02:56

とても勉強になります。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問