更改文件夹中的某些文件扩展名

Posted

技术标签:

【中文标题】更改文件夹中的某些文件扩展名【英文标题】:Changing some file extensions in a folder 【发布时间】:2021-07-22 16:40:09 【问题描述】:

例如,我想将所有文件的扩展名更改为 jpg。我可以用下面的代码做到这一点。但需要一一确定非jpg扩展名。我怎样才能自动做到这一点?

cd C:\Users\user\Desktop\
rename *txt *.jpg

【问题讨论】:

你试过这个班轮@Ren "%UserProfile%\Desktop\*.*" "*.jpg"吗? 工作正常,谢谢,但唯一的问题是如果存在同名文件,则会发出警告“存在重复的文件名,或者找不到文件”。然后,冲突的文件被单独留下。有没有办法删除一个或替换冲突的文件。 这是一个不同的问题! 【参考方案1】:

在被指出之后,我意识到您可能希望将所有文件都设为 jpg 文件,而不仅仅是 .txt 文件。一种方法是:

forfiles /M *.* /C "cmd /c if /i not @ext==\"jpg\" copy @file @fname.jpg /Y & del @file"

如果你想包含子目录:

forfiles /S /M *.* /C "cmd /c if /i not @ext==\"jpg\" copy @file @fname.jpg /Y & del @file"

原答案:

在 bat 文件中你可以这样做:

xcopy *.txt*.jpg /Y
del *.txt

或者作为命令:

xcopy *.txt *.jpg /Y && del *.txt

【讨论】:

也许您完全误解了这个问题?这根本不是所要求的。 不是吗?这会将所有 .txt 文件的副本创建为 .jpg 文件,如果具有该名称的 .jpg 文件已经存在,它将被覆盖。然后所有的txt文件都被删除了。所以基本上这是一个重命名,在名称冲突时自动覆盖,这就是我理解这个问题的方式。 再说一遍,这不是请求的内容,请再次阅读问题。 我读到“rename *txt”,因为他想重命名 .txt 文件,但我已将答案更改为包含所有文件。【参考方案2】:

您有 2 个选项,要么跳过已存在的文件,要么重命名已存在的文件:

跳过已经存在的文件。

@echo off
for %%i in ("%userprofile%\desktop\*.*") do if not "%%~xi" == ".jpg" if not exist "%%~ni.jpg" rename "%%~fi" "%%~ni.jpg"

如果存在则替换文件:

@echo off
for %%i in ("%userprofile%\desktop\*.*") do if not "%%~xi" == ".jpg" move /Y "%%~fi" "%%~dpni.jpg"

【讨论】:

以上是关于更改文件夹中的某些文件扩展名的主要内容,如果未能解决你的问题,请参考以下文章

使用脚本扩展 HTML 文件并覆盖/扩展某些部分标签

如何批量更改子文件夹中的文件扩展名[重复]

Git中的文件夹列为没有扩展名的文件

如何用bat更改文件扩展名

.dist 用作某些源代码文件的扩展名是啥意思?

使用 MFC 以编程方式更改文件扩展名关联?