for循环的奇怪行为(批处理文件)

时间:2016-09-19 03:54:25

标签: batch-file

我正在尝试编写一个简单的for命令,用于重命名文件夹中找到的文件,其前缀如下:

c0001.mp4成为card1-c0001.mp4

然而,当我运行此代码时,第一个文件被重命名两次:card1-card1-c0001.mp4。无论是什么文件夹或文件名,顺序中的第一个文件总是双重重命名。

所有其他文件都没问题。如果我将命令更改为回声,它看起来是正确的。我错过了什么?

for %%a IN ("F:\2016-Sep-18\card1\*.mp4") do ren %%a card1-%%~nxa 

1 个答案:

答案 0 :(得分:6)

批处理读取目录并重命名第一个文件,创建一个新文件名。此新文件名将附加到目录,然后删除原始文件。处理了遇到的下一个名称,但是新名称被放置在由于删除第一个文件名而空出的现在为空的第一个条目中。最后,处理目录中的最后一个文件名 - 这是第一个重命名的文件。

要治愈它,请尝试

set "targetdir=F:\2016-Sep-18\card1"
for /F %%a IN ('dir /b/a-d "%targetdir%\*.mp4"') do ECHO(ren %targetdir%\%%a card1-%%~nxa

请注意,为方便起见,我已将目录名分配给变量(您只需要更改一次而不是多个位置)。我还简单地echo重命名以进行测试和验证。

这里的想法是首先创建dir命令输出(没有目录名,基本格式)并放在内存中。这个"文件"然后处理,因此在重命名操作开始之前dir已完成。

相关问题