【问题标题】:Make this code run on first character使此代码在第一个字符上运行
【发布时间】:2016-02-24 02:50:53
【问题描述】:

我得到了一些批处理代码,它接受一个变量并将其转换为大写字符。即,约书亚将成为约书亚。我一直在阅读所使用命令的文档,但我无法弄清楚代码是如何工作的,但我想修改代码,使其仅将第一个字符大写。即,约书亚对约书亚。我认为这只是修改代码使用的“循环”(?)的问题。任何帮助或建议表示赞赏。

代码 -

 :toUpper str -- converts lowercase character to uppercase
 if not defined %~1 EXIT /b
 for %%a in ("a=A" "b=B" "c=C" "d=D" "e=E" "f=F" "g=G" "h=H" "i=I"
        "j=J" "k=K" "l=L" "m=M" "n=N" "o=O" "p=P" "q=Q" "r=R"
        "s=S" "t=T" "u=U" "v=V" "w=W" "x=X" "y=Y" "z=Z" "ä=Ä"
        "ö=Ö" "ü=Ü") do (
call set %~1=%%%~1:%%~a%%
)
EXIT /b

注意:我在 SET 帮助文档中找不到对多个 % 符号含义的任何参考。我猜这就是问题的关键所在。

干杯

编辑:如果有人能对代码中发生的事情给出一个非常简短的解释,那也太棒了!我唯一理解的部分是用小写字母代替大写字母

【问题讨论】:

    标签: batch-file command


    【解决方案1】:

    首字母大写需要不同的方法:

    @echo off
    
    
    set "name=npocmaka"
    echo before firstToUpper - %name%
    
    call ::firstToUpper name
    
    echo after firstToUpper - %name%
    exit /b 0
    
    
    :firstToUpper var
    setlocal enableDelayedExpansion
    set "name=!%~1!"
    
    set first_letter=%name:~0,1%
    set last_letters=%name:~1%
    
    for %%# 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 first_letter=!first_letter:%%#=%%#!
    )
    
    set "name=%first_letter%%last_letters%"
    
    endlocal && (
        set "%~1=%name%"
    )
    exit /b %errorlevel%
    

    要了解这一点,您可能需要查看delayed expansionvariable substringstring replacement。请注意,替换搜索时字母不区分大小写,而是replacement itself is

    【讨论】:

    • 谢谢。在我当前的代码中调用它的任何建议。我目前将其他代码与以下 -------- 调用 :toUpper ExampleVariable -------- 您提供的代码一起使用吗?
    • @JoshuaPatterson 所以你想将结果分配给 ExampleVariable 并且最初名称包含在变量 ExampleVariable 中?
    • 已排序,谢谢。我自己的代码中的拼写错误导致此代码失败!
    • 为此干杯,问题全部解决 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多