1

Windows のバージョンに応じて異なるコマンドを実行するバッチ ファイルを作成する必要があります。次のバッチを使用しようとしていますが、機能しません

@ECHO off
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

FOR /f "tokens=1,2* delims=." %%a IN ('ver') DO (

SET WVer=%%a
SET WVer=!WVer:~-1!
SET WVer=!WVer!.%%b.%%c
SET WVer=!WVer:]=!
)

ECHO %WVer%

set result=false
if %WVer%==5.1.2600 set result=true
if %WVer%==5.2.3790 set result=true
if "%result%" == "true" (
    GOTO  XPor2003
)
if "%result%" == "false" (
 GOTO  nope
)


:XPor2003
echo XPor2003

:nope
echo nope

私のコメントのコピー: Windows XP でのバッチ スクリプトの結果は次のとおりです。

5.2.3790 x64 
XPor2003
nope

なぜnope結果が表示されるのか不思議です。バッチ スクリプトが制御を誤ったラベルに転送する理由を理解しようとしています。

4

2 に答える 2

5

これを試して:

@echo off
setlocal EnableDelayedExpansion

::Identify OS
for /F "delims=" %%a in ('ver') do set ver=%%a
set Version=
for %%a in (95=95 98=98 ME=ME NT=NT 2000=2000 5.1.=XP 5.2.=2003 6.0.=Vista 6.1.=7 6.2.=8) do (
    if "!Version!" equ "this" (
        set Version=Windows %%a
    ) else if "!ver: %%a=!" neq "%ver%" (
        set Version=this
    )
)

::Identify bit
if exist "%SYSTEMDRIVE%\Program Files (x86)" (
    set Type=64 bit
) else (
    set Type=32 bit
)

::Display result
echo %Version% %Type%
goto :eof


::Goto right version
goto %Version: =_%


:Windows_8
echo Windows 8

:Windows_7
echo Windows 7

© アーチーニ

于 2013-08-06T20:59:38.913 に答える
1

goto :EOFプログラム フローに役立つ3 つのコマンドに注意してください。

set result=false
if %WVer%==5.1.2600 set result=true
if %WVer%==5.2.3790 set result=true
if "%result%" == "true" (
    GOTO  XPor2003
)
if "%result%" == "false" (
 GOTO  nope
)
goto :EOF


:XPor2003
echo XPor2003
goto :EOF

:nope
echo nope
goto :EOF
于 2013-08-07T12:12:48.880 に答える