有没有办法将文件批量重命名为小写?

ino*_*ino 72 windows file-management rename batch-rename

我需要一种方法将文件夹和子文件夹中的所有文件重命名为小写。

我想知道是否有办法使用Windows(XP 或 7)

小智 141

转到目录并运行以下命令:

for /f "Tokens=*" %f in ('dir /l/b/a-d') do (rename "%f" "%f")
Run Code Online (Sandbox Code Playgroud)

如果有人想要修改/改进,这里是细分:

  • for /f - 对于每一行
  • "Tokens=*" - 处理每一行中的每个项目。
  • %f in (...)-%f是每个项目的变量名称。
  • dir - 列出目录中的每个文件和子目录。
  • /l- (dir 的参数)使用小写。
  • /b- (dir 的参数)使用裸格式,只有文件/目录名称,没有大小,没有标题。
  • /a-d- (参数DIR)难道不是列表目录a代表attribute-代表notd代表directory
  • rename "%f" "%f"- 用它自己的名字重命名文件,它实际上是由dir命令和/l组合小写的。

  • 递归版本:`for /f "Tokens=*" %f in ('dir /l/b/ad/s') do (rename "%f" "%f")`(将 /r 添加到 dir)。 (7认同)
  • 递归版本对我不起作用——重命名抱怨命令格式无效。原来 /s 导致第二个文件被列为绝对路径,并使用文件名扩展 (%~nxf) 给了我原始的大写文件名。最终只是手动递归。 (4认同)
  • 这太棒了 (3认同)
  • 这是一个非常好的答案;重点是,不需要外部程序,漂亮而小巧的命令,不需要批处理文件的复杂性。 (3认同)
  • 可以修改小写为大写吗? (2认同)
  • 我不得不将 `%f` 更改为 `%%f`;然后它工作得很好。 (2认同)
  • 对于递归,我必须执行以下操作才能使其正常工作。我遇到了与@Dogmatixed 相同的问题。`for /f "Tokens=*" %g in ('dir /b') do (for /f "Tokens=*" %f in ('dir %~fg /l /b /a-d') do (重命名 "%~fg\%f" "%f"))` (2认同)

joe*_*joe 22

spacetornado Renamer是一个 Windows 程序,可以批量重命名大量文件。您可以搜索和替换文本,删除一定数量的字符,将大小写更改为小写、大写或首字母大写,以及在每个文件名的开头或结尾(追加/前置)添加文本

在此处输入图片说明

  • 我猜反对是因为 OP 想要一个无需任何其他软件即可工作的解决方案。而且我想没有解释downvote,因为有些人倾向于处理报复性downvotes。 (7认同)
  • 不幸的是,人们很少解释:/ (5认同)

nix*_*xda 20

从 Windows 7 开始,您可以将PowerShell用于这些任务

Get-ChildItem "C:\path\to\folder" -recurse | 
  Where {-Not $_.PSIsContainer} | 
  Rename-Item -NewName {$_.FullName.ToLower()}
Run Code Online (Sandbox Code Playgroud)

- 选择您的根文件夹
-根文件夹和子文件夹中的所有文件都被重命名
- 文件夹名称被排除在 Where {-Not $_.PSIsContainer} |


dbe*_*ham 10

这是一个适当的递归命令行解决方案,仅使用实际有效的本机 cmd.exe 命令。我相信这是最简单的本地解决方案:

for /r %D in (.) do @for /f "eol=: delims=" %F in ('dir /l/b/a-d "%D"') do @ren "%D\%F" "%F"
Run Code Online (Sandbox Code Playgroud)

如果您愿意超越本机 cmd.exe 命令,那么另一个选项是我的JREN.BAT 正则表达式重命名实用程序,它支持将名称转换为大写或小写的选项。它是纯脚本(混合 JScript/批处理),可以在 XP 以后的任何 Windows 机器上本地运行 - 不需要第 3 方 exe 文件。完整的文档是内置的 - 从命令行访问jren /?,或者jren /??如果你想要分页输出。

使用 JREN,递归解决方案非常简单:

jren "^" "" /s /l
Run Code Online (Sandbox Code Playgroud)


Syn*_*ech 6

我个人最喜欢的批处理文件重命名实用程序是Cylog 的 WildRename。在许多其他功能中,它可以更改文件名的大小写。WildRename 的最大优点可能是它支持正则表达式!


wc.*_*teo 6

已接受答案的“递归”版本(有效*)

for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"') do (for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g"))


第一个循环

for /f "Tokens=*" %f in ('cmd /c "echo %cd%& dir /l/b/ad/s"')

获取当前(包括它)内所有目录的绝对路径列表:

C:\Foo>

  • C:\Foo \TO.txt

  • C:\Foo\Bar \LOWER.txt

  • C:\Foo\Bar\Baz \CASE.txt


第二个循环

for /f "Tokens=*" %g in ('dir /l/b/a-d "%f"') do (rename "%f"\"%g" "%g")

获取第一个循环找到的每个绝对路径中的所有文件名(或文件名和目录名,如果去掉/a-d开关)的列表,并将这些文件的名称转换为小写。

  • C:\Foo\ TO.txt

  • C:\Foo\Bar\ LOWER.txt

  • C:\Foo\Bar\Baz\ CASE.txt


* 它需要两个循环,因为 to 的第二个参数rename必须是文件名而不是绝对路径(如/s开关获得的那个)。