2017-04-02 42 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

谢谢你们所有人都会测试这个回复给你 –