在第一个字符上制作此代码 运行
Make this code run on first character
我得到了一些批处理代码,它接受一个变量并将其转换为大写字符。即,约书亚将成为约书亚。我一直在阅读所用命令的文档,但我无法完全理解代码的工作原理,但我想修改代码,使其只将第一个字符大写。即,约书亚到约书亚。我认为这只是修改代码使用的 'loop' (?) 的问题。任何帮助或建议表示赞赏。
代码 -
: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 帮助文档中找不到任何关于多个 % 符号含义的参考。我猜这就是问题的关键所在。
干杯
编辑:如果有人能对代码中发生的事情给出一个非常简短的解释,那也太棒了!我唯一理解的部分是用小写字母代替大写字母
首字母大写需要不同的方法:
@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 expansion, variable substring , string replacement. Notice that when replacing search of the letter is not case sensitive but replacement itself is
我得到了一些批处理代码,它接受一个变量并将其转换为大写字符。即,约书亚将成为约书亚。我一直在阅读所用命令的文档,但我无法完全理解代码的工作原理,但我想修改代码,使其只将第一个字符大写。即,约书亚到约书亚。我认为这只是修改代码使用的 'loop' (?) 的问题。任何帮助或建议表示赞赏。
代码 -
: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 帮助文档中找不到任何关于多个 % 符号含义的参考。我猜这就是问题的关键所在。
干杯
编辑:如果有人能对代码中发生的事情给出一个非常简短的解释,那也太棒了!我唯一理解的部分是用小写字母代替大写字母
首字母大写需要不同的方法:
@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 expansion, variable substring , string replacement. Notice that when replacing search of the letter is not case sensitive but replacement itself is