我有一个txt文件,其值如下:
3.6.4.2 3.6.5.1 3.6.5.10 3.6.5.11 3.6.5.12 3.6.5.13 3.6.5.2 3.6.7.1 3.6.7.10 3.6.7.11 3.6.7.2 3.6.7.3
我需要编写一个批处理脚本并返回一个已排序的输出.问题出在最后一栏,数字.10和.11应该在.3之后.我需要"最新版本"在底部,在这种情况下是3.6.7.11
在Linux中,我使用了"sort -t"." - k1n,1 -k2n,2 -k3n,3 -k4n,4"但我无法使用批处理脚本.
此外,由于某些原因,我不允许使用Cygwin或PowerShell.
在我的批处理代码中,我到目前为止只尝试了各种版本,但没有什么对我有用:
sort /+n versions.txt
这个问题中使用的输出很简单
sort versions.txt
看起来命令排序正确,直到我没有使用2位数字.
这是批处理文件中的常见问题.所有排序方法都使用字符串比较,其中"10"出现在"2"之前,因此有必要在小于10的数字中插入左边的零.下面的批处理文件可以做到这一点,而不是生成一个固定的新文件数字,它使用它们来创建一个将自动排序的数组.之后,数组元素以其自然(排序)顺序显示.
编辑:我修改了代码,以管理四个部分中的两位数字.
@echo off setlocal EnableDelayedExpansion for /F "tokens=1-4 delims=." %%a in (input.txt) do ( rem Patch the four numbers as a two digits ones set /A "a=100+%%a, b=100+%%b, c=100+%%c, d=100+%%d" rem Store line in the proper array element set "line[!a:~1!!b:~1!!c:~1!!d:~1!]=%%a.%%b.%%c.%%d" ) rem Show array elements for /F "tokens=2 delims==" %%a in ('set line[') do echo %%a
输出:
3.6.4.2 3.6.5.1 3.6.5.2 3.6.5.10 3.6.5.11 3.6.5.12 3.6.5.13 3.6.7.1 3.6.7.2 3.6.7.3 3.6.7.10 3.6.7.11