我一直在Windows(7 64位)批处理引擎中编写脚本。
我发现真正令人失望的是rename
命令在尝试重命名文件夹中的所有文件并使用“?”时保持文件扩展名不变。
请查看以下命令集:
@echo off
set /p filename="Desired File Name: "
rename *.* "%filename%.???"
这应该保持文件扩展名,但相反,如果我将filename
作为“MONEY 2016”传递,它会意外地将文件重命名为“MONEY 2016.201”,为什么会这样?
另外,作为调试步骤,我在从用户输入文件后立即打印文件名,它用空格打印,所以它看起来不像空间问题。
如何使用尽可能短的单线程来实现预期的工作?
这是我的评论作为答案。
我建议使用For
循环作为执行此任务的简单方法:
@Set /P "filename=Desired File Name: "
@For %%A In (*.*)Do @If Not Exist "%filename%%%~xA" Ren "%%A" "%filename%%%~xA" 2>Nul
请注意,此方法不会对用户输入执行任何验证。他们可以不输入任何内容,也可以输入无效的文件名。如果您认为有必要,我会留给您实施验证过程。
您正在更改原始名称和新名称的结构。 *
肯定不匹配???
(这应该是显而易见的)。具有适当结构的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