gpt4 book ai didi

windows - 如何通过bat文件递归地将文件名从大写更改为小写

转载 作者:可可西里 更新时间:2023-11-01 11:48:12 36 4
gpt4 key购买 nike

我一直在扩展这里解决的问题:https://superuser.com/questions/65302/is-there-a-way-to-batch-rename-files-to-lowercase/412413#412413

我希望将文件名从大写更改为小写,并且由于文件存储在多个文件夹中,我希望以递归方式进行。

我尝试了以下方法:

setlocal EnableDelayedExpansion
CD /D "somefolder"
FOR /D %%G in (*) DO (
FOR /F "Tokens=*" %%f in ('DIR %%G /l/b/a-d') DO (RENAME "%%f" "%%f"))

我得到“系统找不到指定的路径错误”。我确定我忽略了一些明显的东西。

最佳答案

您的代码给出了路径错误,因为重命名找不到文件。 DIR 命令列出子目录下的文件,但你的当前目录不是子目录。

您还有其他问题 - 您没有进行递归文件夹搜索。/D 选项仅列出直接的子文件夹。您的代码会丢失根“somefolder”中的文件,以及任何两层或更多层深的文件夹。

此外,SuperUser 的原始代码也有缺陷。使用 "tokens=*" 将去除前导空格。文件名可能(但不太可能)以空格开头,然后代码就会中断。一种正确的语法是 for/f "eol=: delims="...

MichaelS answer使用 dir/s 选项无法工作,因为 REN 命令不接受目标中的路径信息 - 只能使用文件名和扩展名。通常您会使用 %%~nxF 来解决该问题,但这会恢复到文件名的原始大小写!

这是在命令行上使用的正确递归解决方案:

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

从批处理脚本

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

如果您愿意超越 native cmd.exe 命令,那么另一个选择是我的 JREN.BAT regular expression renaming utility支持将名称转换为大写或小写的选项。它是纯脚本(混合 JScript/批处理),可以在从 XP 开始的任何 Windows 机器上本地运行 - 不需要第 3 方 exe 文件。内置完整文档 - 通过 jren/? 从命令行访问,如果您需要分页输出,则可以通过 jren/?? 访问。

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

jren "^" "" /s /l

关于windows - 如何通过bat文件递归地将文件名从大写更改为小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38502006/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com