批量更改用户输入到正确的案例

时间:2017-01-04 12:57:13

标签: batch-file

如何将%name%更改为正确的案例或标题案例并将其存储在另一个变量中?

我搜索了遍布stackoverflow和所有已接受的答案我不明白,因为这是我的第一个批处理文件。

@echo off
set /p name= Name: 
mkdir %name%

2 个答案:

答案 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%"

使用附加空格时,只会替换单词起始字符。

Source

感谢@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的字符不会更改。

制作一个可以处理所有(特殊)字符,代码页以及纯粹中自定义单词分隔符集的防弹脚本非常困难,所以我选择保持简单