我必须从包含发布工件的发布位置确定最新发布版本。文件夹的外观如下: -
1.4
1.4.1
1.5
1.5.1
1.5.2
latest
在上面的例子中,我的脚本应该返回1.5.2。发布工程师创建一个名为latest
的文件夹,并将最新的版本工件(上述情况中为1.5.2及其内容)放入其中 - 因此我可以轻松地复制最新版本。但我的问题是我也想打印版本。这是我的尝试: -
@echo off
SET Remote="\\path to release location"
SET newest=""
for /f %%a in ('dir %Remote% /b /od') do (if NOT %%a=="latest" SET newest=%%a)
echo %newest%
这适用于上面的例子。但是发布工程师有时会在那里创建一个tmp
或其他文件夹(基本上他忘记了清理),这搞砸了我过滤掉#34;最新版本的天真假设。是否有一种简单的方法可以对以数字开头的文件夹进行排序,以声明最新的发行版本。
另外请提示是否有更好的解决方法
答案 0 :(得分:1)
根据@ Squashman的建议在此发布解决方案: -
@echo off
SET Remote="//Path to release loc"
SET newest=not set
for /f %%a in ('dir %Remote% /b /on ^| findstr /r "^[0-9][0-9]*\.[0-9][0-9]*"') do (SET newest=%%a)
echo %newest%
注意: - 排序顺序/od
vs /on
是我必须与发布工程师合作以达成协议以防止以下情况:修补旧版本不会覆盖最新版本释放
谢谢大家!!
答案 1 :(得分:1)
这并不依赖于最新的修改日期实际上是最大的版本号。
@echo off
setlocal enabledelayedexpansion
set newest=000000000
PUSHD \\servername\share\directory
for /f "delims=" %%G in ('dir /b /ad ^| findstr /r "^[0-9][0-9]*\.[0-9][0-9]*"') do (
FOR /F "tokens=1-3 delims=." %%H IN ("%%~G") DO (
SET "node1=000%%H"
SET "node1=!node1:~-3!"
SET "node2=000%%I"
SET "node2=!node2:~-3!"
SET "node3=000%%J"
SET "node3=!node3:~-3!"
IF 1!node1!!node2!!node3! GTR 1!newest! (
set newest=!node1!!node2!!node3!
set newrelease=%%G
)
)
)
echo %newrelease%
POPD
pause