首页 > 解决方案 > 如何使用批处理脚本将最后一个文件夹名称排在第二位?

问题描述

我需要执行以下操作:

  1. 从目录中获取最新的文件夹名称并将其存储。
  2. 从同一目录中获取 latest-1 文件夹名称并存储。
  3. 比较两者。如果 latest > latest-1 ,执行进一步的步骤。

例如:目录中的文件夹列表:

17731_17.00.00.00_26.01.0008
17731_17.00.00.00_26.01.0009
…
…
…
…
17731_17.00.00.00_26.01.0015
17731_17.00.00.00_27.01.0001

我可以17731_17.00.00.00_27.01.0001使用以下代码获取最新的文件夹名称:

for /f "tokens=*" %%A in ('dir "<directory name>" /AD /O-N /B') do (set recent=%%A & goto exit)
:exit
echo %recent%

但我不知道是否可以获取latest -1文件夹名称,17731_17.00.00.00_26.01.0015以继续执行上述步骤。

我的主要目标是通过比较文件夹名称中的数字来确定版本(在本例中26)何时更改。

请帮忙。

标签: batch-file

解决方案


考虑到我的评论,如果您确定目标目录将始终是最后一个但已命名的目录,则以下示例应该适合您,按字母升序排序。

这是我的评论中提到的使用第一种方法的示例(颠倒排序顺序,跳过第一项,选择下一项并退出循环)

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "LastButOne="
For /F "Skip=1 EOL=? Delims=" %%G In ('Dir /B /A:D /O:-N <directory name>') Do Set "LastButOne=%%G"& GoTo Next
:Next
If Defined LastButOne Echo The alphabetically second-last directory name, is %LastButOne%& Pause

而这个使用第二种方法,在我的评论中提到。(保持排序顺序相同,使用返回的前一项创建一个变量,这样当您到达最后一项时,它会保存倒数第二项)

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "LastButOne="
Set "LastOne="
For /F "EOL=? Delims=" %%G In ('Dir /B /A:D /O:N <directory name>') Do (
    If Defined LastOne (
        SetLocal EnableDelayedExpansion
        For %%H In ("!LastOne!") Do EndLocal & Set "LastButOne=%%~H"
    )
    Set "LastOne=%%G"
)
If Defined LastButOne (
    Echo The alphabetically second-last directory name, is %LastButOne%
    Pause
)

在这两种情况下,请记住<directory name>根据需要进行修改。


推荐阅读