2017-04-02 41 views
1

盼望一些幫助解釋和verifing這個劇本,我得到一個錯誤「後藤在這個時候意外」使用Windows構建和行動「後藤在這個時候意外」

我試圖創建一個腳本,得到視窗版本號...根據版本號,如果其高於或等於則X它必須轉到動作1(FTRDWIN8),當版本號是小於X它必須轉到動作2

@echo off 

::parsing the output of "ver" to getting windows version number 
::excuting. 

set strbuild=6.2 

for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j 
if "%version%" geq "%strbuild%" goto FTRDWIN8 
if "%version%" lss "%strbuild%" goto FTRDWINXPVI7 


:FTRDWIN8 
"C:\Windows\write.exe" 
exit 

:FTRDWINXPVI7 
"C:\Windows\notepad.exe" 
exit 

回答

0

我複製你的代碼並執行,但我不能重現你的錯誤,儘管它給出了錯誤的結果。我有Windows 10(版本10.0.14393),並且您的IF語句進行字符串比較,所以「10.0」小於「6.2」

我看不到您的代碼如何給出錯誤消息「goto在這個時候是意外的「。如果您修改代碼以啓用延遲擴展並使用!var!而不是%var%,那麼您的代碼不可能發生該錯誤。

您應該刪除ECHO OFF,以便您可以看到錯誤消息來自何處。我懷疑這是其他一些無關的代碼,但不能確定。

正如我前面所說的(也是由LotPings指出的),你的邏輯是錯誤的,因爲你的帶有引號和小數點的IF語句會進行字符串比較,而不是數字比較。

這裏是校正後的邏輯,在多個步驟中進行比較 - 每個版本節點必須獨立測試。我沒有看到任何理由設置任何環境變量。另外,我喜歡使用EXIT /B而不是EXIT。我懷疑該代碼可能依賴於語言環境 - 我不確定VER命令是否根據語言環境更改其輸出格式。

@echo off 
for /f "tokens=4-5 delims=. " %%A in ('ver') do (
    if %%A gtr 6 goto FTRDWIN8 
    if %%A equ 6 if %%B geq 2 goto FTRDWIN8 
) 

:FTRDWINXPVI7 
"C:\Windows\notepad.exe" 
exit /b 

:FTRDWIN8 
"C:\Windows\write.exe" 
exit /b 
0

If只比較字符串或整數;在由炭基炭任何非數字字符力字符串比較,然後10.0小於8.1

這略微改變批次

@echo on 
set strbuild=6.2 

for /f "tokens=4-5 delims=. " %%i in ('ver') do set VERSION=%%i.%%j 
if "%version%" geq "%strbuild%" goto FTRDWIN8 
if "%version%" lss "%strbuild%" goto FTRDWINXPVI7 

Goto :eof 
:FTRDWIN8 
"C:\Windows\write.exe" 
Exit 

:FTRDWINXPVI7 
"C:\Windows\notepad.exe" 
Exit 

具有該轉錄與回波:

set strbuild=6.2 
for /F "tokens=4-5 delims=. " %i in ('ver') do set VERSION=%i.%j 
set VERSION=10.0 
if "10.0 " GEQ "6.2" goto FTRDWIN8 
if "10.0 " LSS "6.2" goto FTRDWINXPVI7 
"C:\Windows\notepad.exe" 
Goto :Eof 
+0

謝謝你們所有人都會測試這個回覆給你 –