如何通过删除空格和字符来重命名多个文件名?

如何通过删除空格和字符来重命名多个文件名?

我有多个文件需要重命名

Eg:
     ERJP00300029 3.13.jpg
     SRKP00100002 12.04.jpg
     ERJP01500001 ERJP12 10.5.jpg

我想将上述文件重命名为

Eg:
    ERJP00300029.jpg
    SRKP00100002.jpg
    ERJP01500001.jpg

如何单独保留第一部分的名称。

我使用了下面的代码,但无法得到确切的解决方案。我哪里错了。

@ECHO ON

SETLOCAL ENABLEDELAYEDEXPANSION
SET SourceDir=F:\Ezhilarasan\Exibt\need_upload\ERHP\check
FOR /G "TOKENS=1-3 DELIMS=. " %%G IN ('DIR /B /A-D "%SourceDir%\*.jpg"') DO (
    SET "part1=%%~F" 
    SET "part2=%%~G" 
    SET "part3=%%~H"
    REN "!part1! \%SourceDir%!part2!.!part3!" "!part1!.!part3!"
)
GOTO EOF

答案1

嗯,发生了几件事:

  1. 您的系统是否设置为使用英语以外的语言?在我的(基于英语的)系统上,您尝试执行的命令是FOR /F,而不是FOR /G
  2. 您正在提取1-3以 开头的三个 () 标记%%G,但随后您正在使用%%F%%G%%H。 未将任何内容放入%%F。 更改FOR语句以引用%%F,或更改循环体以使用%%G%%H%%I。 除非……
  3. …不要这样做。你的方法有缺陷。想想月经来意味着什么(.) 和空格作为分隔符。文件名被分成如下标记:

                                         #1 #2 #3 #4 #5
    ERJP00300029 3.13.jpg → ERJP00300029 3 13 jpg
    SRKP00100002 12.04.jpg → SRKP00100002 12 04 jpg
    ERJP01500001 ERJP12 10.5.jpg → ERJP01500001 ERJP12 10 5 jpg

    所以,

    • 文件名并不总是等于part1 part2.part3
    • 扩展并不总是第三个标记,事实上,
    • 对于您的示例文件名,它是绝不第三个标记,以及
    • 它并不总是相同的令牌号。


    我们必须回到这个问题上。

  4. 你认为你使用 REN(重命名)命令做了什么?具体来说,你为什么要把\%SourceDir% 之间 part1part2?你唯一能做的就是%SourceDir%\ part1。请注意,反斜杠 ( \) 需要放在 %SourceDir%
  5. 如果这是完整的批处理文件,则您无需在最后执行任何特殊操作。批处理文件到达末尾时将退出。但是,如果这是较大系统的一部分,则您可能希望在末尾有一个明确的终止命令。该命令应该是GOTO :EOF,而不是GOTO EOF

并非要添乱,但您从中获取输出DIR 并立即将其分解为标记的方法存在缺陷。查看您的示例名称,字符串ERJP12 10.5被分解为三个标记: ERJP12105。但ERJP12.10.5会被分解为相同的标记,因此和也会ERJP12 10 5如此ERJP12.10 5。您无法从标记中重建原始(即当前、现有)文件名;您需要捕获保留原始文件名,然后将其分解。

我不明白你为什么需要运行DIR。你所需要的只是FOR %%F IN ("%SourceDir%\*.jpg") DO;它会给你名字文件仅(无子目录),并且与 的输出不同DIR,它将包含源目录(包含文件的目录)的名称。现在我们在 中有了完整的当前文件路径名%%F,我们可以开始对其进行分解。  现在我们使用FOR /F。因此,获取文件n的一部分%%F,并取出第一部分的标记A然后将原始完整路径名重命名为第一部分加上 eX张力。以下是完整的批处理文件:

SET SourceDir=F:\Ezhilarasan\Exibt\need_upload\ERHP\check
FOR %%F IN ("%SourceDir%\*.jpg") DO (
    FOR /F "DELIMS=. " %%A IN ("%%~nF") DO (
        REN "%%F" "%%A%%~xF"
    )
)

答案2

虽然我同意斯科特
在这个特殊情况下的每一个非常详细的解释,但一个简单的

@Echo On
Pushd F:\Ezhilarasan\Exibt\need_upload\ERHP\check
FOR /F  %%G IN ('DIR /B /A-D "*.jpg"') DO REN "%%G*.jpg" %%G.jpg
PopD

效果一样。
默认是for /f "tokens=1 delims= " 该目录仅返回带有扩展名 jpg 的文件,因此我们可以在重命名时直接使用它。

相关内容