进入目录,运行以下命令。
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
,-
代表not
,d
代表directory
)_。rename "%f" "%f"
-用自己的名字重命名文件,实际上是由dir
命令和/l
组合的小写。spacetornado Renamer是一款Windows程序,可以批量重命名大量文件。您可以搜索和替换文本,删除一定数量的字符,将大小写改为小写、大写或首字母大写,并将文本添加到每个文件名的开头或结尾(附加/前缀)
从Windows 7开始,你可以使用 PowerShell 来完成这些任务
Get-ChildItem "C:\path\to\folder" -recurse |
Where {-Not $_.PSIsContainer} |
Rename-Item -NewName {$_.FullName.ToLower()}
Where {-Not $_.PSIsContainer} |
排除。这里有一个正确的递归命令行解决方案,只使用原生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
我个人最喜欢的批处理文件重命名工具是 Cylog的WildRename 。在许多其他功能中,它可以改变文件名的大小写。WildRename最棒的地方可能是它支持正则表达式。
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
开关得到的那个)。在Windows中最好的程序是 批量重命名实用程序。它是一个男人的工具。你甚至可以使用regex来重命名文件和/或文件夹。它还集成了shell功能(所以你可以通过右键从资源管理器执行),这是非常好的。有64位和32位版本。
http://www.dostips.com/DtCodeCmdLib.php#Function.toLower 给出了一个简单的函数,你应该可以从批处理文件中包含并调用这个函数。
所以让批处理文件遍历文件夹/文件名,然后调用这个函数来生成名字的小写版本。
从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&
loftysnake 对这个问题的公认答案](https://superuser.com/users/128304/loftysnake),对当前目录有效,但不搜索子文件夹。   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 …
。
Powershell
导航到dir并运行。
dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }
我已经验证了这是可行的。在这里找到。 http://www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx