如果我的目录中有很多文本文件,例如
01.text.sql
02text.sql
3text.sql
如何返回具有最高整数的文件名,例如3.text.sql?正如您所看到的那样,这些数字可能没有前缀0并且可能缺少数字。在整数之后。我知道我必须使用类似的东西遍历目录
Choose Highest Numbered File - Batch File
但是,这并未考虑不同的文件名格式。批处理脚本是否可以循环遍历目录并自动拉取具有最高整数的文件,还是必须存储文件名并在单独的循环中相互比较?
目前我有这样的东西,但它返回3text而不是3
SETLOCAL enabledelayedexpansion
SET max=0
FOR %%x in (*.sql) DO (
SET "FN=%%~nx"
SET "FN=!FN:*-=!"
IF !FN! GTR !max! SET max=!FN!
)
ECHO Highest script number is %max%
更新循环:
SETLOCAL enabledelayedexpansion
SET scriptmax=0
FOR %%x in (*.sql) DO (
SET "FN=%%~nx"
SET a=1000!FN!
SET /A FN=a %% 1000
IF !FN! GTR !max! SET max=!FN!
)
答案 0 :(得分:3)
set /A a=b
会将b
中的所有内容解释为第一个非数字字符作为数字,所以
set FN=03text.txt
set /A a=FN
会将%a%
很好地设置为3
。但是我们在这里还有一个问题:前缀为0
的数字将被解释为八进制,因此08和09是非法的。解决这个问题:
set FN=09text.txt
set t=1!FN!
set /A a=t-100
将产生9
。
但是,这只有在你知道预期有多少位数时才有效,可能你必须首先检查前导零(if "%FN:~0,1%" == "0" ...
),和/或甚至砍掉前导零(set FN=%FN:~1%
)
编辑:更好的方式:
set FN=09text.txt
set a=1000!FN!
set /A FN=a %% 1000
适用于任何高达999的任何事情。