当尝试重命名当前文件夹的所有文件时(“批处理脚本”)期望扩展名不变,“?”的行为很可疑

问题描述 投票:0回答:2

我一直在Windows(7 64位)批处理引擎中编写脚本。

我发现真正令人失望的是rename命令在尝试重命名文件夹中的所有文件并使用“?”时保持文件扩展名不变。

请查看以下命令集:

@echo off
set /p filename="Desired File Name: "
rename *.* "%filename%.???"

这应该保持文件扩展名,但相反,如果我将filename作为“MONEY 2016”传递,它会意外地将文件重命名为“MONEY 2016.201”,为什么会这样?

另外,作为调试步骤,我在从用户输入文件后立即打印文件名,它用空格打印,所以它看起来不像空间问题。

如何使用尽可能短的单线程来实现预期的工作?

windows batch-file wildcard file-rename batch-rename
2个回答
1
投票

这是我的评论作为答案。

我建议使用For循环作为执行此任务的简单方法:

@Set /P "filename=Desired File Name: "
@For %%A In (*.*)Do @If Not Exist "%filename%%%~xA" Ren "%%A" "%filename%%%~xA" 2>Nul

请注意,此方法不会对用户输入执行任何验证。他们可以不输入任何内容,也可以输入无效的文件名。如果您认为有必要,我会留给您实施验证过程。


1
投票

您正在更改原始名称和新名称的结构。 *肯定不匹配???(这应该是显而易见的)。具有适当结构的rename命令运行良好:

C:\Users\Antonio\Tests> dir
 El volumen de la unidad C no tiene etiqueta.
 El número de serie del volumen es: 0895-160E

 Directorio de C:\Users\Antonio\Tests

28/03/2019  10:12 p. m.    <DIR>          .
28/03/2019  10:12 p. m.    <DIR>          ..
28/03/2019  10:11 p. m.                 7 four.srt
28/03/2019  10:11 p. m.                 7 one.mkv
28/03/2019  10:11 p. m.                 7 three.avi
28/03/2019  10:11 p. m.                 7 two.mp4
               4 archivos             28 bytes
               2 dirs  391,521,251,328 bytes libres

C:\Users\Antonio\Tests> rename *.* NewName.*

C:\Users\Antonio\Tests> dir
 El volumen de la unidad C no tiene etiqueta.
 El número de serie del volumen es: 0895-160E

 Directorio de C:\Users\Antonio\Tests

28/03/2019  10:12 p. m.    <DIR>          .
28/03/2019  10:12 p. m.    <DIR>          ..
28/03/2019  10:11 p. m.                 7 NewName.avi
28/03/2019  10:11 p. m.                 7 NewName.mkv
28/03/2019  10:11 p. m.                 7 NewName.mp4
28/03/2019  10:11 p. m.                 7 NewName.srt
               4 archivos             28 bytes
               2 dirs  391,521,251,328 bytes libres
© www.soinside.com 2019 - 2024. All rights reserved.