2017-05-04 139 views
1

我要檢測批次的Windows版本和按效果開始exe文件批處理文件: - 檢測Windows版本和運行exe文件

示例代碼不工作

@echo off 
setlocal 
for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j 
if "%version%" geq "6.2" goto netfx_4 
if "%version%" == "6.1" goto netfx_35 
if "%version%" == "6.0" goto netfx_35 

:netfx_35 
start "C:\Users\Ankur\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Accessories\Notepad.lnk" 
exit 1 
goto :EOF 

:netfx_4 
start "C:\Users\Ankur\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Accessories\Notepad.lnk" 
exit 1 
goto :EOF 

endlocal 

對地方測試的EXE我開始記事本文件

但這段代碼不起作用。

回答

1
@echo off 
setlocal 
for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j 
if "%version%" geq "6.2" goto netfx_4 
if "%version%" == "6.1" goto netfx_35 
if "%version%" == "6.0" goto netfx_35 

:netfx_35 
start start "" name.exe 
exit 1 
goto :EOF 

:netfx_4 
start "" name.exe 
exit 1 
goto :EOF 

endlocal 

注: - EXE應爲O批處理文件的同一位置

2

>=是無效的比較運算符。嘗試geq(其它equneqlssleqgtr

+0

喜我更新了代碼,但相同的結果不工作只是cmd打開 –

+0

請解釋發生了什麼。 「不工作」的意思是「沒有達到我的預期」 - 它做了什麼? 「只是cmd打開」 - 不知道你在這裏的意思。 'exit'會退出'cmd' - 如果你只是想返回一個錯誤級別,使用'exit/b errornumber'執行一個'.lnk'會在你的機器上運行可執行文件(我個人使用'notepad',你的'路徑')爲你返回什麼版本? Mine會返回比您的任何測試少的'10.0',因爲比較是以字符串形式執行的,而'1'小於'6'。 – Magoo

+0

對不起,得到的問題exe應該在同一個位置 –

1

當你正在尋找的版本操作系統,其使用WMIC,我走這條路線,(尤其是作爲ver輸出在技術上不是OS版本)

@ECHO OFF 

FOR /F "SKIP=1 TOKENS=1-2 DELIMS=." %%A IN ('WMIC OS GET VERSION' 
) DO FOR %%C IN (%%A%%B) DO IF %%C GEQ 62 GOTO :netfx_4 

:netfx_35 
START "" "%AppData%\Microsoft\Windows\Start Menu\Programs\Accessories\Notepad35.lnk" 
GOTO :EOF 

:netfx_4 
START "" "%AppData%\Microsoft\Windows\Start Menu\Programs\Accessories\Notepad4.lnk" 
GOTO :EOF 
相關問題