2009-11-04 00:22:52 +0000 2009-11-04 00:22:52 +0000
65
65

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

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

我想知道是否有办法用only的windows(XP或7)做到这一点。

答案 (13)

128
128
128
2012-04-14 13:25:17 +0000

进入目录,运行以下命令。

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

下面是分解,以防有人想修改/改进:

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

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

12
12
12
2015-02-24 18:33:51 +0000

从Windows 7开始,你可以使用 PowerShell 来完成这些任务

Get-ChildItem "C:\path\to\folder" -recurse | 
  Where {-Not $_.PSIsContainer} | 
  Rename-Item -NewName {$_.FullName.ToLower()}
  • 选择你的根文件夹
  • 根文件夹和子文件夹内的所有_文件都会被重命名
  • 文件夹名称会被Where {-Not $_.PSIsContainer} |排除。
9
9
9
2016-07-21 22:07:04 +0000

这里有一个正确的递归命令行解决方案,只使用原生cmd.exe命令,实际上是有效的。我相信这是最简单的本地解决方案。

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

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

有了JREN,递归的解决方案就这么简单。

jren "^" "" /s /l
6
6
6
2009-12-05 20:17:27 +0000

我个人最喜欢的批处理文件重命名工具是 Cylog的WildRename 。在许多其他功能中,它可以改变文件名的大小写。WildRename最棒的地方可能是它支持正则表达式。

5
5
5
2016-05-06 15:53:33 +0000

“递归 "版本的公认答案(工作*)

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 ト. txt

  • C:FooBar OWER. 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/BarLOWER.txt

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


  • 它需要两个循环,因为rename的第二个参数必须是一个文件名,而不是一个绝对路径(如/s开关得到的那个)。
3
3
3
2013-04-07 17:06:17 +0000

您可以使用 “字符替换 "策略……。

set Name=%Name:A=a%
set Name=%Name:B=b%
set Name=%Name:C=c%

…以此类推,对字母A-Z进行替换。你可以用FOR循环的形式来实现它。

1
1
1
2011-03-03 00:33:58 +0000

在Windows中最好的程序是 批量重命名实用程序。它是一个男人的工具。你甚至可以使用regex来重命名文件和/或文件夹。它还集成了shell功能(所以你可以通过右键从资源管理器执行),这是非常好的。有64位和32位版本。

1
1
1
2009-11-04 00:56:45 +0000

http://www.dostips.com/DtCodeCmdLib.php#Function.toLower 给出了一个简单的函数,你应该可以从批处理文件中包含并调用这个函数。

所以让批处理文件遍历文件夹/文件名,然后调用这个函数来生成名字的小写版本。

1
1
1
2009-12-05 19:54:00 +0000

http://windowsitpro.com/articles/index.cfm?articleid=81612:

我只用了标准命令,编写了LwrCase.bat和LwrCase/_Folder.bat脚本,将一个文件名重命名为小写,或者将一个文件夹中的所有文件名重命名为小写。

要将文件名重命名为小写,请使用:

[call] LwrCase FullyQualifiedFileName

其中 FullyQualifiedFileName 是要重命名的完全限定文件名。

要重命名一个目录中的所有文件名,使用:

[call] LwrCase_Folder FullyQualifiedDirectoryName [/S]

其中FullyQualifiedDirectoryName是完全限定的文件夹路径,而/S是一个可选的参数,它也将重命名所有子文件夹中的文件名。

注意:LwrCase.bat使用DIR命令的/L开关,它返回小写的名字。

LwrCase.bat包含。

@echo off
if {%1}=={} @echo Syntax: LwrCase FullyQualifiedFileName&goto :EOF
if not exist %1 @echo LwrCase - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
 set file=%%a
)
if /i "%file:~0,1%" EQU "d" @echo LwrCase - %1 is NOT a file.&endlocal&goto :EOF
for /f "Tokens=*" %%f in ('dir %1 /L /b /a /a-d') do (
 Rename %1 "%%f"
)
endlocal

LwrCase/_Folder.bat包含:

@echo off
if {%1}=={} @echo Syntax: LwrCase_Folder FullyQualifiedDirectoryName&goto :EOF
if not exist %1 @echo LwrCase_Folder - %1 NOT found.&goto :EOF
setlocal
for /f "Tokens=*" %%a in ('@echo %~a1') do (
 set folder=%%a
)
if /i "%folder:~0,1%" NEQ "d" @echo LwrCase_Folder - %1 is NOT a folder.&endlocal&goto :EOF
pushd %1
set sw=/B /A /A-D
if /i {%2}=={/S} set sw=%sw% %2
for /f "Tokens=*" %%f in ('dir %sw%') do (
 call LwrCase "%%f"
)
popd
endlocal

**LwrCase/_Folder.bat。

0x1&

1
1
1
2017-05-30 15:01:22 +0000

loftysnake 对这个问题的公认答案](https://superuser.com/users/128304/loftysnake),对当前目录有效,但不搜索子文件夹。 &nbsp Sawny 建议 对 loftysnake 的答案 做一个简单的修改,使其成为递归,但它不起作用,因为,虽然 rename 命令允许你用 filename1(源文件)指定一个驱动器和路径,但 filename2(目标文件)必须只是一个文件名.  引用帮助 (/?) 消息,

…. 你不能为你的目标文件指定一个新的驱动器或路径。

但是move可以在rename不能的地方工作,所以你可以用这个命令递归地将文件重命名为小写。

for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (move /y "%f" "%f")

因为事实证明Move可以处理目录路径。

以上命令在命令提示符中直接输入时有效(CMD.EXE). 如果你想在批处理(.BAT)文件内进行,你必须将%字符加倍。

for /f "Tokens=*" %%f in ('dir /l/b/a-d/s') do (move /y "%%f" "%%f")

你也可以省去括号和/y,只说do move …

0
0
0
2014-11-06 00:08:21 +0000

递归的解决方案。把这个放到recursiverename.cmd文件中。

for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
for /r /d %%x in (*) do (
    pushd "%%x"
    for /f "Tokens=*" %%f in ('dir /l/b/a-d') do (rename "%%f" "%%f")
    popd
)
0
0
0
2016-03-30 10:50:39 +0000

Powershell

导航到dir并运行。

dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }

我已经验证了这是可行的。在这里找到。 http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx