如何批量更改子文件夹中的文件扩展名[重复]
Posted
技术标签:
【中文标题】如何批量更改子文件夹中的文件扩展名[重复]【英文标题】:How to Batch change file extensions within subfolders [duplicate] 【发布时间】:2013-02-25 09:26:48 【问题描述】:我对命令提示符很陌生,从 1 天前才开始使用它。
我在某个位置有一个文件夹,例如C:\Users\Administrator\Desktop\Images
,在该文件夹内大约有 650 个子文件夹,每个子文件夹包含大约 20 张图像,混合了 JPG 和 PNG。我正在寻找 CMD 的命令行,它将遍历所有子文件夹并将每个 .png
文件更改为 .jpg
文件。
我做了一些研究,发现了一些信息,但是很难理解和理解,我仍然无法做到。我想保留文件名,但是将每个文件扩展名从 .png
更改为 .jpg
。
我知道对于 1 个文件夹,该行类似于 ren *.png *.jpg
。但是,这不会将更改应用到子文件夹。
【问题讨论】:
我认为这个问题属于SuperUser而不是***。 Stack Overflow 专门用于解决编程问题。 @Jesse:关于批处理或其他 shell 编程,或者类似的 bash 编程,有很多关于 SO 的问题。为什么这个特别不适合这里? @Jesse:的确,这是关于脚本的,而不仅仅是使用现成的工具。脚本也是编程,尤其是当它需要控制结构时,比如循环。 【参考方案1】:如果我理解正确,您只想将文件从 .png
重命名为 .jpg
,而不是转换它们,您可以使用以下批处理代码:
@ECHO OFF
PUSHD .
FOR /R %%d IN (.) DO (
cd "%%d"
IF EXIST *.png (
REN *.png *.jpg
)
)
POPD
更新:我找到了一个更好的解决方案 here,您可以直接从命令行运行(如果在批处理文件中使用,请使用 %%f
而不是 %f
):
FOR /R %f IN (*.png) DO REN "%f" *.jpg
请注意,上面将处理当前目录及其子目录。如有必要,您可以指定任意目录作为根目录,如下所示:
FOR /R "D:\path\to\PNGs" %f IN (*.png) DO REN "%f" *.jpg
【讨论】:
pushd .
?有什么意义(如果你原谅双关语)? :)
@AndriyM: 有趣的双关语:-) 我想确保命令提示符在完成所有子目录后返回到原始目录,而不是在最后一个目录中结束cd
-ed进入。有没有更好的方法来实现这一点?
一种替代方式,是的。会不会更好,我不确定。我想到的是在循环之前将%CD%
存储在一个变量中,然后在之后对其进行CD-ing。我猜也有两个命令,但太平庸了。 :) 你的解释对我来说很有意义,谢谢。
尽管您可能只是放弃更改目录。我认为ren "%%d\*.png" *.jpg
应该可以正常工作。 (您也可以省略if exist
:ren ... 2>nul
会隐藏有关不存在文件的警告。)
@AndriyM:很好的建议,谢谢,这确实是一个改进。我在 SO 上找到了一个更好的选择 - 请参阅更新的答案。以上是关于如何批量更改子文件夹中的文件扩展名[重复]的主要内容,如果未能解决你的问题,请参考以下文章