对于像下面的文件夹结构
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"