Batch file 基于数字排序的文件夹名称
更准确地说,我想检索数字顺序最高的文件夹的名称。 所有文件夹都是根据一些randon 6位数字命名的 例如: 如果我有名为Batch file 基于数字排序的文件夹名称,batch-file,cmd,Batch File,Cmd,更准确地说,我想检索数字顺序最高的文件夹的名称。 所有文件夹都是根据一些randon 6位数字命名的 例如: 如果我有名为 123456 234567 345678 然后我希望能够使用字符串345678 比如: set highestNumber=<code for highest number> set highestNumber= 使用的选项/O获取文件夹的排序列表,使用a遍历该列表,并将当前项分配给变量by,该变量将最终保存最后一项: 对于/F“delims=eol=:”%D
set highestNumber=<code for highest number>
set highestNumber=
使用的选项/O
获取文件夹的排序列表,使用a遍历该列表,并将当前项分配给变量by,该变量将最终保存最后一项:
对于/F“delims=eol=:”%D in('dir/B/A:D/O:N“D:\root\*”)是否设置“LAST=%D”
回音(%LAST%)
这取决于所有文件夹名称由相同位数组成的事实
如果文件夹名称是不具有相同位数的数字,并且您想要最大的数字,
dir/O:N
不起作用,因为它进行字母排序,其中10
出现在2
之前。因此,您需要更改方法——下面是一个示例(范围0
到2147483647
):
setlocal EnableDelayedExpansion
rem//初始化缓冲区:
设置“GRNUMB=”
对于/F“delims=eol=:”%%D in('
纯数字名称的rem/过滤器文件夹:^&^
目录/B/A:D“D:\root\*”^ | findstr/R/C:“^0$”/C:“^[1-9][0-9]*$”
""做"(
rem//进行数值比较:
如果%%D GTR!GRNUMB!设置/A“GRNUMB=%%D”
)
rem//返回结果:
回音(%GRNUMB%)
端部
变量GRNUMB
包含迄今为止遇到的最大数量的文件夹的名称。只要当前文件夹的名称构成较大的数量,GRNUMB
就会更新
如果文件夹名称是不具有相同位数且也可以以零开头的数字,则需要稍微更改代码——以下是一个示例(最多5位数):
setlocal EnableDelayedExpansion
rem//初始化缓冲区:
set“GRNAME=“&set/A”GRNUMB=0”
对于/F“delims=eol=:”%%D in('
纯数字名称的rem/过滤器文件夹:^&^
目录/B/A:D“D:\root\*”^ | findstr“^[0-9][0-9]*$”
""做"(
rem//删除前导零:
设置“NAME=%%D”和设置/A“NUMB=10000%%D,NUMB%%=10000”
rem//进行数值比较:
if!NUMB!GTR!GRNUMB!设置“GRNAME=!NAME!”&设置/A“GRNUMB=!NUMB!”
)
rem//返回结果:
回显(%GRNAME%)
端部
变量GRNAME
保存迄今为止遇到的最大数量的文件夹名称,GRNUMB
保存转换为真实整数值的数字1。只要当前文件夹的名称包含较大的数字,就会更新GRNAME
和GRNUMB
1) 命令
set/A“NUMB=10000%%D,NUMB%%=10000”
在10000
之前,然后将结果除以10000
并返回余数;其结果是前导零消失,这将导致设置/A
和如果将数字解释为八进制整数,否则不一致。文件夹真的命名为10020030000它实际上是6吗数字随机数数字也可以以零开始吗?不,常规正整数如果文件夹包含相同数量的数字,这是完全正确的,但它也可以用于具有不同数量数字的文件夹吗?现在是的,因为我添加了另外两种方法,能够将数字文件夹名称作为真实整数处理r值,甚至可以处理在批处理脚本中可能出现问题的前导零…可能是一个愚蠢的问题,但为什么在echo命令之后会有一个“(”不,这不是一个愚蠢的问题!echo%VAR%
返回echo打开|关闭。
如果%VAR%
为空;echo(%VAR%
是避免意外行为的唯一安全方法;关于该问题,有一个线程。。。