batch-file - 如何使用批处理脚本将最后一个文件夹名称排在第二位?
问题描述
我需要执行以下操作:
- 从目录中获取最新的文件夹名称并将其存储。
- 从同一目录中获取 latest-1 文件夹名称并存储。
- 比较两者。如果 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
)何时更改。
请帮忙。
解决方案
考虑到我的评论,如果您确定目标目录将始终是最后一个但已命名的目录,则以下示例应该适合您,按字母升序排序。
这是我的评论中提到的使用第一种方法的示例(颠倒排序顺序,跳过第一项,选择下一项并退出循环):
@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>
根据需要进行修改。
推荐阅读
- r - R:write.dbf() 更改我的数据框列的名称
- visual-studio - 为什么 Visual Studio 在构建时没有注意到 packages.config 的更改?
- c# - 如何对导入的 PDF 模态进行断言或验证?
- python - python aiohttp中间件func定义;为什么有区别,什么是最好的
- c# - 如何从一种类型序列化/反序列化到另一种类型?
- colors - Vulkan - 浮点着色器颜色值到读取缓冲区中的 uchar 值的奇怪映射
- vba - 如何创建一个从位于同一工作表但位置不同的表中添加值的列表
- java - 在 Kotlin 中创建 JPA 规范对象
- javascript - 从 Javascript 传递到 Java 时,具有高 Unicode 字符的字符串会损坏
- elasticsearch - 我们可以使用 Elasticsearch SQL 来插入或更新数据吗?