【问题标题】:strange behavior with for loop (batch file)for循环的奇怪行为(批处理文件)
【发布时间】:2016-09-19 03:54:24
【问题描述】:

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

c0001.mp4 变成 card1-c0001.mp4

它可以工作,但是,当我运行此代码时,第一个文件被重命名了两次:card1-card1-c0001.mp4。不管是什么文件夹或文件名,序列中的第一个文件总是被重命名。

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

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

【问题讨论】:

标签: batch-file


【解决方案1】:

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

要治愈它,请尝试

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-07
    • 2023-04-08
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多