我需要一种将文件夹和子文件夹中的所有文件重命名为小写的方法。
我想知道是否有一种方法可以仅使用Windows(XP或7)
我需要一种将文件夹和子文件夹中的所有文件重命名为小写的方法。
我想知道是否有一种方法可以仅使用Windows(XP或7)
Answers:
转到目录并运行以下命令:
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
组合键小写的。for /f "Tokens=*" %f in ('dir /l/b/a-d/s') do (rename "%f" "%f")
将/ r添加到dir)。
spacetornado重命名器是一个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
/a-d
开关,它也将小写文件夹名称。
" D"') was unexpected at this time.
作为直接命令运行它可以正常工作,而作为批处理文件运行时则不起作用。不确定如何使其作为批处理文件工作,但我想直截了当地解决这个问题。
%D
必须更改为%%D
,如果将命令放入批处理脚本中%F
,%%F
则必须更改为。
我个人最喜欢的批处理文件重新命名实用程序是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 \ 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
开关获取的路径)。
cmd /c "echo %cd%&
要先进入for
?完全没有必要。
echo %cd%
可以将当前文件夹添加到绝对路径列表中;并cmd /c
进行&
合并命令的工作。我对Windows批处理脚本一无所知;如果您知道更好的方法,请随时改善答案!
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
在Windows中执行此操作的最佳程序是Bulk Rename Utility。这是一个勒芒工具。您甚至可以使用正则表达式来重命名文件和/或文件夹。它还具有外壳程序集成(因此您可以右键单击从资源管理器执行),这非常好。提供64位和32位版本。
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 …
。
move
在rename
不起作用的地方起作用,我认为我是唯一建议在此使用该move
命令的人。我只是接受了@loftysnake和@sawny的建议,并希望可以稍微改善一下它们。
move
,但现在找不到。
电源外壳
导航到目录并运行:
dir | Rename-Item -NewName { $_.Name.ToLowerInvariant() }
我已经验证了这是可行的。在这里找到:http : //www.hanselman.com/blog/PennyPinchingVideoMovingMyWebsitesImagesToTheAzureCDNAndUsingACustomDomain.aspx