2017-01-04 26 views
0

如何將%name%更改爲適當的案例或標題案例並將其存儲在另一個變量中?批量更改用戶輸入正確的案例

我已經搜索了所有的stackoverflow和所有接受的答案我不明白,因爲這是我的第一批文件。

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

[將用戶輸入的第一個字母作爲批處理腳本中的首字母]的可能副本(http://stackoverflow.com/questions/4107905/make-the-first-letter-of-user-input-a-資本批處理腳本) – Alejandro

+2

http://www.robvanderwoude.com/battech_convertcase.php – Richard

+0

只需添加以下內容作爲您的第二行'echo WARNING鍵入的條目區分大小寫' – Compo

回答

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 

請注意,這不能正確處理所有特殊字符。如字分離器,標準令牌隔板SPACETAB,;=和非休息空間(0xFF)採取。大於0x7F的字符在大小寫字母中不會更改。

製作防彈腳本非常困難,它可以處理所有(特殊)字符,代碼頁以及純粹的中的一組自定義字詞分隔符,因此我選擇保持簡單。

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他的更正和補充!

+0

我認爲有一些'%'符號缺失:'do call set「name = %% name:%%〜i %%」';請注意,第一個單詞前面沒有空格,因此您應該在循環之後設置「name =%name%」'和'set「name =%name:* =%」'... – aschipfl

+0

Wouldnt最後一個刪除一切,直到最後一部分沒有空間? – geisterfurz007

+1

最後一個會刪除一切,包括第一個空格。由於第一行在文本之前有一個空格,所以最後一行再次有效地刪除該空格;你也可以編寫'set'name =%name:〜1%''代替(刪除第一個字符)... – aschipfl