批处理脚本以获取最新文件夹

时间:2017-09-21 20:24:15

标签: batch-file

我必须从包含发布工件的发布位置确定最新发布版本。文件夹的外观如下: -

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;最新版本的天真假设。是否有一种简单的方法可以对以数字开头的文件夹进行排序,以声明最新的发行版本。

另外请提示是否有更好的解决方法

2 个答案:

答案 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