在Windows上用一个命令更改文件夹中所有文件的扩展名

190

我该如何使用Windows命令行将成千上万个文件的扩展名更改为*****.jpg


更改所有扩展名为*****.jpg是什么意思?这是否意味着将所有文件扩展名更改为jpg?如果是,请使用ren . *.jpg。 - Imran Rizvi
什么操作系统?你想如何更改它们? - bryce
@bryce 当然是 Windows 操作系统。 - Berker Yüceer
15个回答

371

你可以使用ren(如rename):

ren *.XXX *.YYY

当然,将 XXX 和 YYY 替换为适当的扩展名。它将从 XXX 变为 YYY。如果要更改所有扩展名,只需再次使用通配符即可:

ren *.* *.YYY

使用FOR命令可以实现递归操作。可以使用/R选项将命令递归应用于匹配文件。例如:

for /R %x in (*.txt) do ren "%x" *.renamed

将从当前目录开始递归地更改所有.txt扩展名为.renamed的文件。 %x是保存匹配文件名的变量。

由于您有成千上万个文件,请等待光标再次闪烁,表示已完成工作。

注意:此方法仅适用于cmd。不适用于Powershell或Bash。


递归替换所有子目录中的内容怎么样? - NightElfik
1
@NightElfik 我添加了一个使用 FOR 的递归示例。 - keyser
@MonaJalal 在 Windows 的 cmd.exe 中吗? - keyser
6
我无法在PowerShell中使其正常工作,但在cmd.exe中可以正常运行。这只是为了让其他人知道。 - hazzey
1
在进行通配符匹配时,您需要将匹配项包含在目标文件名中:ren "*.html" "#1.pug" - Martinffx
显示剩余3条评论

35

在CMD中

输入

ren *.* *.jpg

.会选择所有文件,并将它们的名称重命名为 *(无论原本的名称是什么),并更改扩展名为jpg。


12

重命名功能有时候并不尽如人意;例如...

ren *.THM *.jpg 会将你的THM文件重命名为扩展名为.jpg的文件。例如:GEDC003.THM 将变成 GEDC003.jpg

ren *.THM *b.jpg 会将你的THM文件重命名为*.THMb.jpg。例如:GEDC004.THM 将变成 GEDC004.THMb.jpg

ren *.THM *.b.jpg 会将你的THM文件重命名为*.b.jpg。例如:GEDC005.THM 将变成 GEDC005.b.jpg


很好的解释 - Arslan Ahmad khan

7

注意:不适用于Windows系统

使用ren-1.0的正确形式为:

"ren *.*" "#2.jpg"

来自 man ren

替换模式是带有嵌入通配符索引的另一个文件名,每个索引由 # 字符后跟 1 到 9 的数字组成。在匹配文件的新名称中,通配符索引将被原始文件名中引用的通配符所匹配的实际字符替换。

并且

请注意,shell 通常会扩展通配符 * 和 ?,这在 ren 命令中是不希望出现的。因此,在大多数情况下,必须将搜索模式括在引号内。


我不得不使用 #1:ren "*.csv" "#1.json"。 - elmalto
1
“man ren”? 这个问题涉及Windows / cmd。现在它们提供“man”页面吗? “ren-1.0”是什么,我们如何查看其上下文中的“man”页面? - underscore_d

6

那很简单。

ren *.* *.jpg

在命令提示符中尝试执行以下操作:


4

在我的Windows系统中,ren指令无法正常工作。于是我进行了一些搜索并编写了一个通用的bash解决方案。您可以在Windows上通过git bash运行它,也可以在Linux shell上运行它。

for f in `find * -type f | grep .png`; do mv -- "$f" "${f%.png}.jpg"; done

3

我曾经遇到过设计师没有给图片添加扩展名的问题(有时候苹果电脑会这样做)。因此,您可以使用以下方法:

ren *. *.jpg

添加扩展名,以便Windows用户可以使用这些文件。


谢谢你,你的回答对我很有用。我需要删除所有文件扩展名,但我不知道右侧点号后面为空的语法。我执行了“ren . *.”并删除了所有扩展名。 - august0490

3

重命名多个文件的扩展名:

你想将ringtone1.mp3ringtone2.mp3改为ringtone1.wavringtone2.wav

以下是操作步骤: 我在命令提示符(CMD)中使用d驱动器:

d:\>ren *.* *.wav 

这只是文件扩展名的示例,您可以使用任何类型的文件扩展名,如WAV、MP3、JPG、GIF、bmp、PDF、DOC、DOCX、TXT,这取决于您的操作系统。
而且,由于您有成千上万个文件,请确保等待光标再次闪烁,表示它已经完成工作。

3

这段代码适用于批处理文件,已经可以正常工作:

FOR /R "C:\Users\jonathan\Desktop\test" %%f IN (*.jpg) DO REN "%%f" *.png

在这个例子中,C:\Users\jonathan\Desktop\test 目录中所有扩展名为 .jpg 的文件都会被更改为*.png。

1
在我的情况下,我有一个目录,里面有800多个以.StoredProcedure.sql结尾的文件(它们是使用SSMS脚本化的)。
上面发布的解决方案不起作用。但我想出了这个: (基于batch programming - get relative path of file的答案)
@echo off
setlocal enabledelayedexpansion
for %%f in (*) do (
  set B=%%f
  set B=!B:%CD%\=!
  ren "!B!" "!B:.StoredProcedure=!"
)

上述脚本从文件名中删除子字符串.StoredProcedure。我相信它可以被改编以涵盖更多情况,要求输入并且更加通用。

2
请用以下单行命令替换您的两个 set 命令:set "B=%%~nxf"。(%%~nxf%%fname 和 extension)。当您进行递归操作时,%cd% 可能无效。 - Stephan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接