@echo off
setlocal
if not 1 == 1 (
echo 1
exit /b 2
) else (
echo 2
exit /b 2
)
call :testVersions 2.1 1.9
call :testVersions “2,1” 1-9
call :testVersions 1.9 2.1
call :testVersions 1.13 1.4
call :testVersions 1.4 1.13
call :testVersions 1.3.4 1.3.4
call :testVersions 1.3.4 1.3.5
call :testVersions 1.3.5 1.3.4
call :testVersions 1.3.5 1.3.5.1
call :testVersions 1.3.5.1 1.3.5
call :testVersions 1.3b 1.3
call :testVersions 1.3 1.3b
call :testVersions 1.10a 1.9
call :testVersions 1.9 1.10a
call :testVersions 1.9a 1.9b
call :testVersions 1.9b 1.9a
call :testVersions 1.9a 1.9A
exit /b
:testVersions version1 version2
call :compareVersions %1 %2
if %errorlevel% == 1 set “result=greater than”
if %errorlevel% == -1 set “result=less than”
if %errorlevel% == 0 set “result=equal to”
echo %~1 is %result% %~2
exit /b
:compareVersions version1 version2
::
:: Compares two version numbers and returns the result in the ERRORLEVEL
::
:: Returns 1 if version1 > version2
:: 0 if version1 = version2
:: -1 if version1 < version2
::
:: The nodes must be delimited by . or , or -
::
:: Nodes are normally strictly numeric, without a 0 prefix. A letter suffix
:: is treated as a separate node
::
setlocal enableDelayedExpansion
set “v1=%~1”
set “v2=%~2”
call :divideLetters v1
call :divideLetters v2
:loop
call :parseNode “%v1%” n1 v1
call :parseNode “%v2%” n2 v2
if %n1% gtr %n2% exit /b 1
if %n1% lss %n2% exit /b -1
if not defined v1 if not defined v2 exit /b 0
if not defined v1 exit /b -1
if not defined v2 exit /b 1
goto :loop
:parseNode version nodeVar remainderVar
for /f “tokens=1* delims=.,-” %%A in (“%~1”) do (
set “%~2=%%A”
set “%~3=%%B”
)
exit /b
:divideLetters versionVar
for %%C in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set “%1=!%1:%%C=.%%C!”
exit /b
本文详细介绍了如何使用批处理脚本比较不同版本号格式的字符串,通过调用testVersions函数实现版本号大小关系的判断。核心内容包括解析版本节点和字母节点,以及错误码返回结果的应用。
3855

被折叠的 条评论
为什么被折叠?



