这是一个很好的问题!
让我们专注于简单
for
命令片刻。使用此命令时,存在与此命令相关的已知错误
重命名文件
。例如:
set i=0
for %%a in (*.txt) do (
set /A i+=1
ren "%%a" !i!.txt
)
在这种情况下,某些文件经常被重命名两次,在某些情况下甚至重命名三次。问题是,这种行为取决于一系列未记录的因素,例如第一个重命名文件在原始文件列表中的位置以及其他几个点。类似地,如果文件在由
对于
,显示“找不到文件”消息
通常
发布(尽管不是所有时间)。如果在目录中创建了新文件
之后
这个
对于
开始执行,则可能会或可能不会由
对于
这(再次)取决于一系列因素。避免重命名问题的通常方法是强制
对于
命令首先读取整个文件列表
然后
处理列表:
for /F "delims=" %%a in ('dir /B *.txt') do (
set /A i+=1
ren "%%a" !i!.txt
)
这样,对磁盘中的文件所做的更改无关紧要:
for /F
命令将始终处理
起初的
文件列表。
类似的问题也发生在
for /R
命令,但在这种情况下,出现问题的可能性更大,因为可以进行动态更改的目录更多。再次强调:确切的行为取决于一系列未知因素,避免这些因素的方法是通过
for /F ... in ('dir /S /B')
。然而,如果您是
真正地
对这一点感兴趣,我鼓励你对这一主题进行一系列测试(并发布结果)。
;)