[前の記事]« XCOPYで最新ファイルだけ複写するには
[次の記事]バッチでファイルを読み込んで、取得した文字列をSQL文の条件に設定したい »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「SYSTEMINFO,VER…システムやハードウェアの状況取得」索引へ

バッチファイルでWindowsの種類を判別するには?

1150.
バッチファイルでWindowsの種類を判別するには?
2006年05月30日(火) 23時03分
銀松
以前どこかで見たような気がするのですが、失念してしまったので質問させてください。

バッチファイル(*.cmd)から、セットアップしたばかりのOSの種類を判別するには、どうしたらいいのでしょうか。

ターゲットのOSは、Windows2000/XPを想定しています。

よろしくお願いします。
1151.
Re:バッチファイルでWindowsの種類を判別するには?
2006年05月30日(火) 23時06分
銀松
補足です。

>ターゲットのOSは、Windows2000/XPを想定しています。
ServicePackの種類も判別できると、なおいいです。

よろしくお願いします。


1152.
Re:バッチファイルでWindowsの種類を判別するには?
2006年05月30日(火) 23時35分
じゃく
こんばんは
>>ターゲットのOSは、Windows2000/XPを想定しています。

私の個人Webページを紹介しておきます。
(3種類の方法を記載。そのうち1つはこの掲示板の過去ログです)

http://homepage1.nifty.com/jak/batch/os.html#3


>ServicePackの種類も判別できると、なおいいです。

systeminfo (2000/XP) の出力を取得するか、
XP なら wmic os get ServicePackMajorVersion の
出力を取得すれば判定出来ると思います。
dxdiagも使えるかな。

1153.
Re:バッチファイルでWindowsの種類を判別するには?
2006年05月31日(水) 00時30分
銀松
お答えいただき、ありがとうございます。

>>>ターゲットのOSは、Windows2000/XPを想定しています。
>
>私の個人Webページを紹介しておきます。
>(3種類の方法を記載。そのうち1つはこの掲示板の過去ログです)
>
>http://homepage1.nifty.com/jak/batch/os.html#3
>
参考にさせていただきます。

>systeminfo (2000/XP) の出力を取得するか、
>XP なら wmic os get ServicePackMajorVersion の
>出力を取得すれば判定出来ると思います。
>dxdiagも使えるかな。

申し遅れましたが、判定結果により処理を分けたいと考えています。
また、バッチファイルはCD-R/RWにコピーして使います。

具体的には、こういうことがしたいのです。

まず2000かXPかを判別し、
2000の場合は、
 SP4が適用されていれば続きを実行します。
 SP4未適用であれば、その旨を表示して終了します。
XPの場合は、
 SP1/SP1a/SP2が適用されているとき、CD-R/RWに識別ファイルがあれば、続きを実行します。
 SPが未適用であれば、その旨を表示して終了します。

以上、よろしくお願いします。
1155.
Re:バッチファイルでWindowsの種類を判別するには?
2006年05月31日(水) 13時17分
銀松
dxdiagでならOSを問わずできそうですね。

具体的には、どうすればいいでしょうか?
1158.
Re:バッチファイルでWindowsの種類を判別するには?
2006年05月31日(水) 21時58分
銀松
>dxdiagでならOSを問わずできそうですね。

dxdiag /whql:off /t c:\temp.txt
を試してみましたが、2000やXP SP1aではDirectX9.0cが導入されていないとダメみたいです。

いろいろ調べているうちに、レジストリから判別できるとの情報を得ました。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion]
の"CurrentVersion"と"CSDVersion"の値で判別できるとのことなので、
それらをバッチファイルで処理できれば、何とかなりそうなのですが・・・。

そこで試しに、
OSのインストールディスクからreg.exeを抽出して
REG EXPORT "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" C:\TEMP.REG
FOR /F "USEBACKQ DELIMS=" %%A IN (C:\TEMP.REG) DO ECHO %%A
をやってみましたが、何も表示されず・・・。

どうすればいいでしょう・・・?
1159.
Re:バッチファイルでWindowsの種類を判別するには?
2006年06月01日(木) 07時18分
じゃく
こんにちは。

>いろいろ調べているうちに、レジストリから判別できるとの情報を得ました。
>
>[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion]
>の"CurrentVersion"と"CSDVersion"の値で判別できるとのことなので、
>それらをバッチファイルで処理できれば、何とかなりそうなのですが・・・。
>
>そこで試しに、
>OSのインストールディスクからreg.exeを抽出して
>REG EXPORT "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" C:\TEMP.REG
>FOR /F "USEBACKQ DELIMS=" %%A IN (C:\TEMP.REG) DO ECHO %%A
>をやってみましたが、何も表示されず・・・。

私も for 文で何も出てこないと思ったのですが、どうやらtemp.reg のサイズが大きすぎることが原因のようです。(私の環境で1メガほど)

こんな感じでいかがでしょうか。
REG EXPORT "HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion" C:\TEMP.REG

for /F "usebackq tokens=2 delims==" %%a in (`type \TEMP.REG^|find """CurrentVersion"""`) do set OSVer=%%a
for /F "usebackq tokens=2 delims==" %%a in (`type \TEMP.REG^|find "CSDVersion"`) do set SPack=%%a

CD-RWでバッチを実行とされていましたが、Cドライブにtempファイルを作れるのですね。
1160.
Re:バッチファイルでWindowsの種類を判別するには?
2006年06月01日(木) 11時58分
銀松
こんにちは。

REG QUERYからリダイレクトさせれば、スマートにいけそうです。

SET TEMPFILE=%SYSTEMDRIVE%\TEMP.TXT
:GETOS 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V CurrentVersion>%TEMPFILE% 
FOR /F "USEBACKQ TOKENS=1-3" %%A IN (%TEMPFILE%) DO IF "%%A"=="CurrentVersion" SET OS=%%C 
IF "%OS%"=="5.1" ( 
 SET OS=XP 
 GOTO GOTOS 

IF "%OS%"=="5.0" ( 
 SET OS=2K 
 GOTO GOTOS 

ECHO OSを判別できませんでした。作業を中断します。 
PAUSE 
EXIT 
goto eof 
:GOTOS 
IF "%OS%"=="XP" ( 
 FIND "Professional" "%WINDIR%\SYSTEM32\EULA.TXT" > NUL 
 IF NOT ERRORLEVEL 1 SET OS=XPP 
 FIND "Home" "%WINDIR%\SYSTEM32\EULA.TXT" > NUL 
 IF NOT ERRORLEVEL 1 SET OS=XPH 

if exist %TEMPFILE% del %TEMPFILE% 
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V CSDVersion > %TEMPFILE% 
FOR /F "USEBACKQ TOKENS=1-5" %%A IN (%TEMPFILE%) DO IF "%%A"=="CSDVersion" (
 SET OS=%OS%SP%%E
 GOTO EOF 

ECHO W2KではSP4が、WXPではSP1aまたはSP2が適用されている必要があります 
ECHO 適用後に実行してください 
PAUSE 
EXIT 
GOTO EOF 

>CD-RWでバッチを実行とされていましたが、Cドライブにtempファイルを作れるのですね。

えっと、、、正常に稼動している2KProSP4/XPPro(Home)SP1/SP1a/SP2で動作させることを想定していますので。

最終的には、このファイルをバッチファイルから出力させるようにします。
1161.
Re:バッチファイルでWindowsの種類を判別するには?
2006年06月04日(日) 10時25分
otn
解決したようですが、

>>REG EXPORT "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" C:\TEMP.REG
>>FOR /F "USEBACKQ DELIMS=" %%A IN (C:\TEMP.REG) DO ECHO %%A
>>をやってみましたが、何も表示されず・・・。
>
>私も for 文で何も出てこないと思ったのですが、どうやらtemp.reg のサイズが大きすぎることが原因のようです。(私の環境で1メガほど)

for /f で読めないのは、ファイルが unicode だからです。
for … in (`type C:\TEMP.REG`) do … にするか、もしくは、
type C:\TEMP.REG > C:\ASCII.REG
で、一旦ASCII/SJISに変換すれば読めます。
1162.
Re:バッチファイルでWindowsの種類を判別するには?
2006年06月04日(日) 16時40分
じゃく
>解決したようですが、
>
>>>REG EXPORT "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" C:\TEMP.REG
>>>FOR /F "USEBACKQ DELIMS=" %%A IN (C:\TEMP.REG) DO ECHO %%A
>>>をやってみましたが、何も表示されず・・・。
>>
>>私も for 文で何も出てこないと思ったのですが、どうやらtemp.reg のサイズが大きすぎることが原因のようです。(私の環境で1メガほど)
>
>for /f で読めないのは、ファイルが unicode だからです。
>for … in (`type C:\TEMP.REG`) do … にするか、もしくは、
>type C:\TEMP.REG > C:\ASCII.REG
>で、一旦ASCII/SJISに変換すれば読めます。

てっきりサイズが大きいせいだと思ったのですが、ちがうのですね。

REG EXPORT の出力は unicode になるという情報はどこかに記載されているのですか?
(確かにエディタで開くと unicode と表示されました)

for /F のファイルセットで unicode で記載されたテキストが処理できないのも既知の情報なのでしょうか。

勉強になりました。

1163.
Re:バッチファイルでWindowsの種類を判別するには?
2006年06月04日(日) 17時27分
otn
>>for /f で読めないのは、ファイルが unicode だからです。
>>for … in (`type C:\TEMP.REG`) do … にするか、もしくは、
>>type C:\TEMP.REG > C:\ASCII.REG
>>で、一旦ASCII/SJISに変換すれば読めます。
>
>てっきりサイズが大きいせいだと思ったのですが、ちがうのですね。
>
>REG EXPORT の出力は unicode になるという情報はどこかに記載されているのですか?
>(確かにエディタで開くと unicode と表示されました)

REG EXPORT自体はあまり使ったこと無かったですが、regeditからexportしたファイルはunicodeだというのは経験上知っていた(昔使っていエディタがunicode未対応だったので、メモ帳で編集していた)ので、REG コマンドもそうだろうと思ってみてみるとそうでした。

>for /F のファイルセットで unicode で記載されたテキストが処理できないのも既知の情報なのでしょうか。

私のTipsの殆どは実験結果からの推測です。

もしやと思って、cmd /u で起動したcmd.exeでもfor /fでunicodeファイルからは読めませんでした。

 
 


カテゴリー「SYSTEMINFO,VER…システムやハードウェアの状況取得」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2006年05月30日 01:26に投稿されたエントリーのページです。

ひとつ前の投稿は「XCOPYで最新ファイルだけ複写するには」です。

次の投稿は「バッチでファイルを読み込んで、取得した文字列をSQL文の条件に設定したい」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート