【问题标题】:Change Filename Case DOS Batchfile更改文件名案例 DOS 批处理文件
【发布时间】:2014-07-19 07:20:36
【问题描述】:

我已经使用下面的代码使用 DOS 批处理文件将文件名的大小写更改为小写,但我想知道是否有人可以帮助我添加包含代码以将每个文件名的第一个字母也大写。

乔治 :-)

pushd %varFolderTemp%
setlocal enableDelayedExpansion
for %%f in (*.*) do (
set "filename=%%~nf"
set filename=!filename:A=a!
set filename=!filename:B=b!
set filename=!filename:C=c!
set filename=!filename:D=d!
set filename=!filename:E=e!
set filename=!filename:F=f!
set filename=!filename:G=g!
set filename=!filename:H=h!
set filename=!filename:I=i!
set filename=!filename:J=j!
set filename=!filename:K=k!
set filename=!filename:L=l!
set filename=!filename:M=m!
set filename=!filename:N=n!
set filename=!filename:O=o!
set filename=!filename:P=p!
set filename=!filename:Q=q!
set filename=!filename:R=r!
set filename=!filename:S=s!
set filename=!filename:T=t!
set filename=!filename:U=u!
set filename=!filename:V=v!
set filename=!filename:W=w!
set filename=!filename:X=x!
set filename=!filename:Y=y!
set filename=!filename:Z=z!
ren "%%~nxf" "!filename!%%~xf"
)
popd

【问题讨论】:

    标签: batch-file case filenames dos


    【解决方案1】:

    你可以利用子字符串替换区分大小写这一事实,即在源字符中忽略大小写,但在替换字符中保留大小写:

    @echo off
    setlocal EnableDelayedExpansion
    
    rem Capitalize.bat: Change file names with first letter uppercase, the rest 
    
    lowercase
    
    for %%f in (*.*) do (
       set "filename=%%~Nf"
       rem Change all letters to lowercase
       for %%a 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 "filename=!filename:%%a=%%a!"
       )
       rem Change first letter to uppercase
       set "letter=!filename:~0,1!"
       for %%A 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 "letter=!letter:%%A=%%A!"
       )
       ren "%%f" "!letter!!filename:~1!%%~Xf"
    )
    

    【讨论】:

    • 我喜欢你的 Aacini 编码——你经常有非常优雅的方法,虽然有时更难破译。我只是想提一下! 字符会破坏这一点。
    • 谢谢,狐狸!是的,文件名中!的问题和往常一样,但我不想提它,因为大多数用户都没有这种情况。如果有人遇到这个问题,并寻求解决方案,那么是时候解释一下环境切换技术;-)
    【解决方案2】:

    不确定您的代码是否是最佳(可能是)解决方案,但我没有更改它:

    @echo off
    setlocal enableDelayedExpansion
    for %%f in (*.*) do (
    set "filename=%%~nf"
    set filename=!filename:A=a!
    set filename=!filename:B=b!
    set filename=!filename:C=c!
    set filename=!filename:D=d!
    set filename=!filename:E=e!
    set filename=!filename:F=f!
    set filename=!filename:G=g!
    set filename=!filename:H=h!
    set filename=!filename:I=i!
    set filename=!filename:J=j!
    set filename=!filename:K=k!
    set filename=!filename:L=l!
    set filename=!filename:M=m!
    set filename=!filename:N=n!
    set filename=!filename:O=o!
    set filename=!filename:P=p!
    set filename=!filename:Q=q!
    set filename=!filename:R=r!
    set filename=!filename:S=s!
    set filename=!filename:T=t!
    set filename=!filename:U=u!
    set filename=!filename:V=v!
    set filename=!filename:W=w!
    set filename=!filename:X=x!
    set filename=!filename:Y=y!
    set filename=!filename:Z=z!
    ren "%%~nxf" "!filename!%%~xf"
    )
    
    for %%l 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 (
        for %%f in (*.*) do (
            set filename=%%~nf
            if /i "!filename:~0,1!" EQU "%%~l" (
                ren "%%~nxf" "%%l!filename:~1!%%~xf"
            )
        ) 
    )
    endlocal
    popd
    

    【讨论】:

    • 您好 npocmaka 非常感谢您的帮助。是的,代码不是最优的,但我理解!但是,既然我看到了您的代码,我将着眼于提高它的效率。再次感谢。乔治:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多