![如何从文件夹名称为版本字符串的文件夹集合中获取最新版本字符串](https://linux22.com/image/1462862/%E5%A6%82%E4%BD%95%E4%BB%8E%E6%96%87%E4%BB%B6%E5%A4%B9%E5%90%8D%E7%A7%B0%E4%B8%BA%E7%89%88%E6%9C%AC%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%B9%E9%9B%86%E5%90%88%E4%B8%AD%E8%8E%B7%E5%8F%96%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
对于像下面的文件夹结构
RootFolder
|
|--1.2.3
|--1.2.4
|--2.1.3
...
...
...
在 RootFolder 下,有一组文件夹,它们都以版本字符串命名
通过使用 Windows 批处理命令,有没有办法对它们进行排序并获取最大版本?
谢谢!
答案1
从目录目录中获取“最后”版本
一个有趣的问题,因为它是 Windows 批处理!dir
你的朋友在这里吗?借用PabloG 在 SO 上的回答:
@ECHO OFF
FOR /F %%I IN ('DIR *.* /B /O:G-N') DO ECHO %%I & EXIT /B
放置在RootFolder
命名的位置lastversion.bat
(或其他任何位置)。您可以通过从cmd.exe
1调用来进行测试。
请注意,我只用非常非常数量有限“类似版本”目录命名的目录。
解释
FOR /F %%I IN
- 循环 ( FOR
) 遍历以下文件集 ( /F
),使用变量I
( %%I
) 2
'DIR *.* /B /O:G-N'
- 列出*.*
目录中的所有文件 ( ),以裸格式 ( /B
),排序 ( /O:
) 按字母顺序反向排序3 ( -N
) 目录优先 ( G
) 4
DO ECHO %%I & EXIT /B
- 打印第一的文件名并立即终止(EXIT
)仅限批处理文件(/B
)
附加脚注
1 @ECHO OFF
抑制命令回显,但你可能已经知道了
2 %%I
- 在批处理文件中使用两个百分号,或者如果在交互式提示中,只需%I
3 按字母顺序反向意味着我们并不关心哪个版本实际上是最后编写的,而只是获取最高的版本号;这可能不是我们所希望的
4首先对目录进行分组,以便普通文件排到最后,从而被忽略
答案2
“自然”数字排序(即识别数字并按其数值排序)对于 Windows 批处理来说非常麻烦。虽然可以做到,但事实上您有多个数字,这让问题变得更加麻烦。
这个问题很容易解决排序命令- 一个纯基于脚本的实用程序(混合 JScript/batch),可以在 XP 及以上版本的任何 Windows 机器上本地运行。
要简单地获取排序列表:
dir /b /ad RootFolder | jsort /n
仅列出最高版本号:
dir /b /ad RootFolder | jsort /n /r /c 1
要将变量设置为最高版本:
@echo off
setlocal
for /f "delims=" %%F in ('dir /b /ad RootFolder ^| jsort /n /r /c 1') do set "largest=%%F"