批处理:返回具有最高整数

时间:2016-08-08 13:31:41

标签: windows batch-file filenames

如果我的目录中有很多文本文件,例如

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!
)

1 个答案:

答案 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的任何事情。