使用 RENAME 为一组文件添加前缀时出现的问题

使用 RENAME 为一组文件添加前缀时出现的问题

我在尝试重命名文件夹中的几百张图像时遇到了以下问题(这是既定的,我无法影响它)。

所有文件都具有结构“名称{空格}后缀.JPG“。
因此图像可以具有相同的姓名,但在这种情况下,其区别在于后缀.例如

L083192 (1).JPG  
L083192 (2).JPG  
L083192 (3).JPG  
L083192 (4).JPG

或者

L081473 a.JPG  
L081473 b.JPG

目的是为所有同名图像添加一个计数器(作为前缀)。即

1_L083192 (1).JPG  
1_L083192 (2).JPG  
1_L083192 (3).JPG  
1_L083192 (4).JPG

[..]

16_L081473 a.JPG  
16_L081473 b.JPG

计数器是在“FOR /F”循环中计算的,该循环确定哪些名称相同,因此应该获得相同的前缀。
但是当我尝试通过应用以下 REN 命令添加计数器前缀时:

ren "%%h*" "!cnt!_%%h*"

我遇到麻烦了。
%%h and !cnt! are variables of the "FOR /F" loop

这是相应的输出:

L083192 (1).jpg >> 1_L0831921).jpg        [i.e. " (" gone missing]  
[..]  
L083192 (4).jpg >> 1_L0831924).jpg        [id.]

两个“L081473”文件甚至导致单身的输出文件(不带后缀)!

16_L081473.JPG

毫无疑问,这与 dbenham 在他的关于 REN(AME) 命令的详尽文章,但我无法解决上述情况,因为我预计原始文件名会被截断,而不是在此过程中丢失一些中间字符。也许原始文件名中的空格是原因,尽管我在命令中引用了这些文件名REN以容纳空格?有人能解释一下吗?

此外,由于REN似乎无法产生所寻找的结果(或者可以吗?),我如何使用普通批处理获得目标结果?

REN我也尝试使用COPY或来解决这个问题XCOPY,但结果是一样的。这些命令似乎采用了相同的方案——正如 dbenham 精心建议的那样在同一篇文章中(见注释)。


批处理文件

FOR /F %%h IN (input.txt) DO (

    IF NOT "%%h" == "prev" (set /A cnt+=1)  

        [some more logic..]

    cd Images
    ren "%%h*" "!cnt!_%%h*"
    cd..

        [some more logic..]

    set prev=%%h
)

笔记:我删除了批处理中的附加逻辑,这样可以避免文件被多次重命名。“input.txt”仅包含所有出现的名称(即没有后缀),这足以计算前缀。我可以提供一个示例文件,但没有找到如何将其链接到此消息。此外,这不允许复制重命名(此外,“Images”文件夹大约为 480 Mb)。
通过更改为子目录“Images”(其中的文件正在等待重命名)来考虑此文件夹中的完整文件名。(REN仅在当前目录中有效)

答案1

您错过了,或者没有意识到我的 RENAME 帖子中此段的重要性:

任何名称都可以分解为由. 字符分隔的部分,并且只能在每个部分末尾添加或删除字符。不能在组件的开头或中间删除或添加字符,同时使用通配符保留其余部分. 任何地方都允许替换。

您正在尝试在基本名称的开头添加字符,并使用通配符保留基本名称。根据我上面的陈述,这无法完成。您必须单独重命名每个文件。这应该不是特别困难。我假设您的其他逻辑是正确的:

FOR /F %%h IN (input.txt) DO (

    IF NOT "%%h" == "prev" (set /A cnt+=1)  

        [some more logic..]

    cd Images
    for %%F in ("%%h*") do ren "%%F" "!cnt!_%%F"
    cd..

        [some more logic..]

    set prev=%%h
)

%%F请注意,如果由于启用了延迟扩展而包含,代码将失败!。这可以通过增加一些代码来解决。最好先禁用延迟扩展,然后根据需要暂时启用。

setlocal enableDelayedExpansion
for %%N in (!cnt!) do (
  endlocal
  for %%F in ("%%h*") do ren "%%F" "%%N_%%F"
)

相关内容