我拼命地尝试阅读最高的foldername来创建10个具有连续名称的新文件夹。 这些文件夹的编号为例如1234,1235,1236。
SET datei=0
FOR /D %%a IN (*) DO (
ECHO %datei%
IF %%a GTR %datei% SET datei=%%a
)
ECHO %datei%
输出
0
0
0
1234
不是我的预期,有人可以帮忙吗? 数字与字符串有问题吗?
问候 斯蒂芬
答案 0 :(得分:0)
您的批处理代码不起作用,因为 IF 命令行中的%datei%
已被0
扩展(替换),已经预处理整个命令块(
并且在执行 FOR 命令之前以匹配)
结束。打开命令提示符窗口并在 IF 和 FOR 示例上运行set /?
解释延迟环境变量扩展,然后阅读此示例关于delayed expansion的文章。从批处理文件顶部删除cmd.exe
并在命令提示符窗口中运行它而不是双击批处理文件(=调试批处理文件)时,也可以看到@echo off
执行批处理文件的此行为)。
此批处理代码应该可以避免使用延迟扩展的要求:
@echo off
for /F "eol=| delims=" %%I in ('dir * /AD /B /O-N 2^>nul') do set "FolderName=%%I" & goto FoundFolder
set "FolderName=0001"
:FoundFolder
rem Print the name of the folder with highest number.
set FolderName
命令 DIR 输出
/AD
(属性目录)*
/B
,因为只有文件夹名称而没有路径,所以/O-N
而以相反顺序按名称按字母顺序排序。因此, DIR 输出的第一行是具有最高编号的文件夹名称,只要所有文件夹名称具有相同的位数,根据相关的示例情况就是这种情况。此文件夹名称将分配给环境变量,并在处理 DIR 输出的其他文件夹名称之前退出循环,并跳转到标签FoundFolder
。
也可以使用此代码使用延迟扩展来处理具有不同位数的文件夹名称:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "FolderName=0"
for /D %%I in (*) do (
echo !FolderName!
if %%I GTR !FolderName! set "FolderName=%%I"
)
echo !FolderName!
rem Other commands in batch file.
endlocal
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
dir /?
echo /?
endlocal /?
for /?
goto /?
if /?
rem /?
set /?
setlocal /?
另请阅读有关Using Command Redirection Operators的Microsoft文章,了解2>nul
的说明。重定向运算符>
必须使用 FOR 命令行上的插入符^
进行转义,以便在执行命令之前Windows命令解释程序处理此命令行时将其解释为文字字符FOR ,它在后台启动的单独命令进程中执行嵌入式dir
命令行。