如何将%name%
更改为正确的案例或标题案例并将其存储在另一个变量中?
我搜索了遍布stackoverflow和所有已接受的答案我不明白,因为这是我的第一个批处理文件。
@echo off
set /p name= Name:
mkdir %name%
答案 0 :(得分:1)
最明显的使用方法是使用字符串替换:
SET name=%name:A=a%
SET name=%name:B=b%
...
SET name=%name:Y=y%
SET name=%name:Z=z%
另一个选择是遍历所有替换以使其更紧凑:
FOR %%i IN ("A=a" "B=b" ... "Y=y" "Z=z") DO CALL SET "name=%%name:%%~i%%"
使用相同的系统,你可以做标题案例:
set "name= %name%"
FOR %%i IN (" A= a" " B= b" ... " Y= y" " Z= z") DO CALL SET "name=%%name:%%~i%%"
set "name=%name:~1%"
使用附加空格时,只会替换单词起始字符。
感谢@aschipfl的更正和补充!
答案 1 :(得分:1)
这是一个非常简单的脚本,可以将文本转换为大写文本,因此每个单词都以大写字母开头,并且在其他地方有小写字母。假设批处理文件名为capitalise.bat
,请将文本作为命令行参数提供,如下所示:capitalise.bat "tHIS is SOME sAmplE teXt"
,因此它将作为This Is Some Sample Text
返回。这是代码:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "TEXT=%~1"
set "$BUF="
setlocal EnableDelayedExpansion
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 (
set "TEXT=!TEXT:%%L=%%L!"
)
endlocal & set "TEXT=%TEXT%"
call :CAPITALISE %TEXT%
echo(%$BUF:~1%
endlocal
exit /B
:CAPITALISE
if "%~1"=="" exit /B
set "WORD=%~1"
setlocal EnableDelayedExpansion
set "CHAR=!WORD:~,1!"
>&2 echo(!CHAR!
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 (
if /I "!CHAR!"=="%%L" set "CHAR=%%L"
)
>&2 echo(!CHAR!
for /F "delims=" %%K in ("!$BUF! !CHAR!!WORD:~1!") do (
endlocal
set "$BUF=%%K"
)
shift /1
goto :CAPITALISE
exit /B
请注意,这不能正确处理所有特殊字符。作为单词分隔符,标准标记分隔符 SPACE , TAB ,,
,;
,=
和非中断空格({ {1}})被采取。代码大于0xFF
的字符不会更改。
制作一个可以处理所有(特殊)字符,代码页以及纯粹batch-file中自定义单词分隔符集的防弹脚本非常困难,所以我选择保持简单