递归批量重命名文件扩展名(Windows批处理)

Posted

技术标签:

【中文标题】递归批量重命名文件扩展名(Windows批处理)【英文标题】:Mass rename of file extensions recursively (windows batch) 【发布时间】:2013-07-13 13:26:53 【问题描述】:

我在一个非常复杂的目录结构中有许多文件,出于不值得讨论的原因,我需要将所有带有“.inp”扩展名的文件重命名为“.TXT”扩展名。还有许多其他文件具有其他扩展名,我不想被触及,我想递归地至少向下执行 5 级。

到目前为止我有:

for /d %%x in (*) do pushd %%x & Ren *.inp *.TXT & popd

...但这只会下降一级目录。

有人可以帮忙吗?提前致谢!

【问题讨论】:

【参考方案1】:

John Smith 的回答非常好,而且有效。但要完全清楚(我不得不重新阅读 magoo 的笔记以找出正确的语法),这正是您需要做的......

BATCH FILE:
FOR /R %%x IN (*.js) DO ren "%%x" *.txt

COMMAND LINE:
FOR /R %x IN (*.js) DO ren "%x" *.txt

投票赞成他们的回答,我只是一个卑微的形成者......

【讨论】:

【参考方案2】:
for /r startdir %%i in (*.inp) do ECHO ren "%%i" "%%~ni.txt"

应该适合你。将 startdir 替换为您的起始目录名,当您检查此项目是否满意时,删除 ren 之前的 echo 以实际进行重命名。


对于不赞成投票者:执行批处理文件与从命令提示符执行不同之处在于每个 %%x 其中x 是元变量(循环控制变量)需要减少到 %,所以

for /r startdir %i in (*.inp) do ECHO ren "%i" "%~ni.txt"

如果您从提示符执行此操作,应该可以工作。请阅读关于echo的说明。

【讨论】:

@Magoo... 我想我爱你。感谢这个解决了我生命中 2 天的问题的解决方案,非常感谢! 我喜欢这个回声选项。我试图运行它,最初是在错误的目录中。 echo 选项救了我。 我希望这能解释 ~ni 的用途 @HDog :从提示中查看文档for /?~n 修改元变量 i 以仅选择 Name 部分。【参考方案3】:

在 Windows 7 上,以下单行命令适用于我,以递归方式将 *.js 中的所有文件重命名为 *.txt:

FOR /R %x IN (*.js) DO ren "%x" *.txt

【讨论】:

这有效,选择的答案没有,说“%%i 是意外的”。谢谢你! 从接受的答案中的代码中得到相同的错误“%%i is inexpected”。请注意,您必须 cd 到开始目录 @SteveChamaillard :这是因为所选答案假定该行位于批处理文件中。如果从提示符执行,则需要将每个%% 更改为% @brunettdan : : 这是因为所选答案假定该行位于批处理文件中。如果从提示符处执行,则需要将每个%% 更改为%

以上是关于递归批量重命名文件扩展名(Windows批处理)的主要内容,如果未能解决你的问题,请参考以下文章

windows dos 批量重命名文件

Windows批处理脚本实现批量复制文件并重命名

在 Windows 中使用索引保留批量重命名文件

批处理:批量重命名父文件夹下所有子文件夹里的文件

Linux 批量重命名文件的方法

查找和重命名没有扩展名的文件?