我有多个文件需要重命名
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
嗯,发生了几件事:
- 您的系统是否设置为使用英语以外的语言?在我的(基于英语的)系统上,您尝试执行的命令是
FOR /F
,而不是FOR /G
。 - 您正在提取
1-3
以 开头的三个 () 标记%%G
,但随后您正在使用%%F
、%%G
和%%H
。 未将任何内容放入%%F
。 更改FOR
语句以引用%%F
,或更改循环体以使用%%G
、%%H
和%%I
。 除非…… …不要这样做。你的方法有缺陷。想想月经来意味着什么(
.
) 和空格作为分隔符。文件名被分成如下标记:#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
, - 扩展并不总是第三个标记,事实上,
- 对于您的示例文件名,它是绝不第三个标记,以及
- 它并不总是相同的令牌号。
我们必须回到这个问题上。- 文件名并不总是等于
- 你认为你使用 REN(重命名)命令做了什么?具体来说,你为什么要把
\%SourceDir%
之间part1
和part2
?你唯一能做的就是%SourceDir%\
前part1
。请注意,反斜杠 (\
) 需要放在后%SourceDir%
。 - 如果这是完整的批处理文件,则您无需在最后执行任何特殊操作。批处理文件到达末尾时将退出。但是,如果这是较大系统的一部分,则您可能希望在末尾有一个明确的终止命令。该命令应该是
GOTO :EOF
,而不是GOTO EOF
。
并非要添乱,但您从中获取输出DIR
并立即将其分解为标记的方法存在缺陷。查看您的示例名称,字符串ERJP12 10.5
被分解为三个标记:
ERJP12
、10
和5
。但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 的文件,因此我们可以在重命名时直接使用它。