gpt4 book ai didi

Windows 批处理文件 - 对于给定目录和子目录中的所有文件 - 将文件扩展名更改为小写

转载 作者:可可西里 更新时间:2023-11-01 14:42:02 24 4
gpt4 key购买 nike

我的目标:使用 Windows 批处理脚本确保给定目录和子目录中的所有文件都具有小写的文件扩展名

我已经设法做到了这一点(我承认不是很远!)..

for /R c:\test %%G in (*.*) do (
echo %%G
)

这成功地打印出了所有带有扩展名(包括完整路径)的文件,但是我如何检查文件扩展名并确保它是小写的(顺便说一句,我不想​​让文件名小写......只是扩展名)。

提前致谢!

格雷格

最佳答案

完成任务需要 2 种(可能是 3 种)技术。

1) 您需要解析文件名和文件扩展名——如 FOR HELP 中所述,这很简单。 (在命令行输入 HELP FOR)

  • %%~nG = 文件名
  • %%~xG = 文件扩展名

2) 你需要将每个文件扩展名存储在一个变量中,然后使用如下代码将其转换为小写

for %%C in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set "ext=!ext:%%C=%%C!"

您需要在脚本顶部使用 setlocal enableDelayedExpansion 启用延迟扩展。

上面的工作是因为搜索和替换的搜索部分不区分大小写。

3) 在不太可能的情况下,文件扩展名可能包含 !,您需要在循环中打开和关闭延迟扩展。但我严重怀疑你会遇到那种情况。

这是一个完成的、功能正常的脚本,它忽略了第 3 点。

@echo off
setlocal enableDelayedExpansion
for /r "c:\test" %%F in (*) do if "%%~xF" neq "" (
set "ext=%%~xF"
for %%C in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do set "ext=!ext:%%C=%%C!"
ren "%%F" "%%~nF!ext!"
)


Bali C 在他的回答中有一个有趣的想法,但并不完全奏效。我设法通过在临时文件夹中创建一个名称仅包含文件扩展名的临时文件来使其工作。但它比上述解决方案慢。

@echo off
setlocal
set "folder=%temp%\ren%random%"
md "%folder%"
for /r "c:\test" %%F in (*) do if "%%~xF" neq "" (
copy nul "%folder%\%%~xF" >nul
for /f "delims=" %%X in ('dir /b /l "%folder%"') do ren "%%F" "%%~nF%%X"
del /q "%folder%"
)
rd "%folder%"

关于Windows 批处理文件 - 对于给定目录和子目录中的所有文件 - 将文件扩展名更改为小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12749269/

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