我想要检索数字顺序最高的文件夹的名称,以便更精确。 所有文件夹都是根据一些randon 6位数命名的。
例如:
如果我有名为
的文件夹然后我希望能够使用字符串 345678 分配变量 类似的东西:
set highestNumber=<code for highest number>
答案 0 :(得分:1)
使用dir
command的/O
选项获取已排序的文件夹列表,使用for /F
loop遍历该列表,并通过{{3}将当前项目分配给变量},最终将保留最后一项:
for /F "delims= eol=:" %%D in ('dir /B /A:D /O:N "D:\root\*"') do set "LAST=%%D"
echo(%LAST%
这取决于所有文件夹名称由相同的位数组成的事实。
如果文件夹名称是不具有相同位数的数字,并且您想要最大数字,dir /O:N
不起作用,因为它会进行字母排序,10
出现在2
之前{1}}。所以你需要改变方法 - 这是一个例子(范围0
到2147483647
):
setlocal EnableDelayedExpansion
rem // Initialise buffer:
set "GRNUMB="
for /F "delims= eol=:" %%D in ('
rem/ Filter folders for purely numeric names: ^& ^
dir /B /A:D "D:\root\*" ^| findstr /R /C:"^0$" /C:"^[1-9][0-9]*$"
') do (
rem // Do numeric comparison:
if %%D GTR !GRNUMB! set /A "GRNUMB=%%D"
)
rem // Return result:
echo(%GRNUMB%
endlocal
变量GRNUMB
包含构成目前遇到的最大数字的文件夹的名称。只要当前文件夹的名称构成一个更大的数字,GRNUMB
就会更新。
如果文件夹名称是不具有相同位数的数字并且也可以以零开头,则需要稍微更改一下代码 - 这是一个示例(最多可以使用5位数字):
setlocal EnableDelayedExpansion
rem // Initialise buffers:
set "GRNAME=" & set /A "GRNUMB=0"
for /F "delims= eol=:" %%D in ('
rem/ Filter folders for purely numeric names: ^& ^
dir /B /A:D "D:\root\*" ^| findstr "^[0-9][0-9]*$"
') do (
rem // Remove leading zeros:
set "NAME=%%D" & set /A "NUMB=10000%%D, NUMB%%=10000"
rem // Do numeric comparison:
if !NUMB! GTR !GRNUMB! set "GRNAME=!NAME!" & set /A "GRNUMB=!NUMB!"
)
rem // Return result:
echo(%GRNAME%
endlocal
变量GRNAME
包含构成目前遇到的最大数字的文件夹的名称,GRNUMB
保持该数字转换为真正的整数值 1 。只要当前文件夹的名称构成一个更大的数字,GRNAME
和GRNUMB
都会更新。
1)命令set /A "NUMB=10000%%D, NUMB%%=10000"
在10000
之前,然后将结果除以10000
并返回余数;这样做的结果是前导零消失,这会导致set /A
和if
以无意义的方式将数字解释为八进制整数。