【问题标题】:Unable to compare decimal number via batch无法通过批处理比较十进制数
【发布时间】:2016-11-25 04:03:19
【问题描述】:

有一个问题,我似乎无法使以下脚本工作。基本上作为总结,我需要确保应用程序的版本大于 2.0.0.8

这是我的代码:

setlocal enabledelayedexpansion
set n2=2.0.0.8
FOR /F "tokens=2* delims=0   " %%A IN ('REG QUERY "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall
\FB58E75BC1D58DF60340894DB00D3FA9BBD513B6" /v displayversion') DO SET n1=%%B 
IF %n1% GEQ %n2% (goto success) else (goto error)

:success
start notepad.exe
Goto:eof

:error
start winword.exe
Goto:eof

:eof
exit

输出工作正常,n1 输出大于 2.0.0.8 的版本(输出 2.0.0.12),使用记事本和 winword 启动纯粹作为测试。

不管它总是出错并打开 Winword.exe

测试中的值是 2.0.0.12 为什么还是会报错呢?

希望这是有道理的

谢谢

米高扬

【问题讨论】:

标签: batch-file scripting windows-scripting


【解决方案1】:
setlocal enabledelayedexpansion
set n2=2.0.0.8
FOR /F "tokens=2* delims=0   " %%A IN ('REG QUERY "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\FB58E75BC1D58DF60340894DB00D3FA9BBD513B6" /v displayversion') DO SET n1=%%B 
for /f "tokens=1,2,3,4 delims=." %%a in ("%n2%") do set "v2=%%a%%b%%c%%d"
for /f "tokens=1,2,3,4 delims=." %%a in ("%n1%") do set "v1=%%a%%b%%c%%d"
IF %v1% GEQ %v2% (goto success) else (goto error)

【讨论】:

    【解决方案2】:

    尝试删除点,以便将它们作为小数进行比较:

    setlocal enabledelayedexpansion
    set n2=2.0.0.8
    FOR /F "tokens=2* delims=0   " %%A IN (
        'REG QUERY "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\FB58E75BC1D58DF60340894DB00D3FA9BBD513B6" /v displayversion'
    ) DO SET n1=%%B 
    
    for /f "tokens=1,2,3,4 delims=." %%a in ("%n2%") do set "v2=%%a%%b%%c%%d"
    for /f "tokens=1,2,3,4 delims=." %%a in ("%n1%") do set "v1=%%a%%b%%c%%d"
    
    IF %v1% GEQ %v2% (goto success) else (goto error)
    

    【讨论】:

    • 恐怕这只有在相应的数字部分具有相同的位数时才有效......
    • 感谢大家为我指引正确的道路,在你们的帮助下设法解决了这个问题,非常感谢 npocmaka!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多