2017-09-27 44 views
1

我有一個變量,我試圖只將大寫字母變成不同的數字。批處理:只將大寫字母轉換爲符號

set var1=HeLlO 
set var1=%var1:A=0% 
set var1=%var1:B=1% 
set var1=%var1:C=2% 
set var1=%var1:D=3% 
... 
echo %var1% 

但是發生了什麼事情是當我只想把它變成大寫字母L時,它將兩個字母都變成數字。

set var1=%var1:A=1% 

代碼變成全部小寫的,並全部大寫作爲進1,但我希望它只是把大寫字母視爲成1S

+1

看功能:toCamelCase:TOLOWER和:本網站上TOUPPER:http://www.dostips.com/DtCodeCmdLib.php他們應該給你如何做到這一點更好的主意。 – Squashman

+0

我仍然不能得到它的工作,即時嘗試只將大寫字母變成數字,但所有字母變成數字,而不只是大寫字母。 – Cristopher

+0

查看ROT13加密算法。 http://www.dostips.com/forum/viewtopic.php?f=3&t=1226&start=15#p7028 – Squashman

回答

1

我把這個代碼dbenham's ROT13。只是不得不評論一些事情。

@echo off 

set var=AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz! 
echo var is: %var% 
call :rot13 var newvar 
setlocal enabledelayedexpansion 
echo var is: !newvar! 

pause 
goto :EOF 

:rot13 StrVar [RtnVar]   -- Applies the ROT13 cipher to a string 
:: 
:: Applies the simple "rotate alphabet 13 places" cipher to the string 
:: contained within variable StrVar. 
:: 
:: Sets RtnVar=result 
:: or displays result if RtnVar not specified 
:: 
    setlocal 
    set "NotDelayedFlag=!" 
    setlocal enableDelayedExpansion 
REM set "upper=#AAN#BBO#CCP#DDQ#EER#FFS#GGT#HHU#IIV#JJW#KKX#LLY#MMZ#NNA#OOB#PPC#QQD#RRE#SSF#TTG#UUH#VVI#WWJ#XXK#YYL#ZZM#" 
    set "upper=#[email protected]#BB$#CC-#DD_#EE=#FF+#GG`#HH:#II;#JJ'#KK{#LL}#MM[#NN]#OO\#PP/#QQ,#RR.#SS~#TTÄ#UU?#VV<#WW>#XX|#YYÖ#ZZÜ#" 
REM set "lower=#aan#bbo#ccp#ddq#eer#ffs#ggt#hhu#iiv#jjw#kkx#lly#mmz#nna#oob#ppc#qqd#rre#ssf#ttg#uuh#vvi#wwj#xxk#yyl#zzm#" 

    set "str=A!%~1!" 
    set "len=0" 
    for /L %%A in (12,-1,0) do (
    set /a "len|=1<<%%A" 
    for %%B in (!len!) do if "!str:~%%B,1!"=="" set /a "len&=~1<<%%A" 
) 
    set /a len-=1 
    set rtn= 
    for /l %%n in (0,1,!len!) do (
    set "c=!%~1:~%%n,1!" 
    if "!c!" geq "a" if "!c!" leq "Z" (
     for /f "delims=" %%c in ("!c!") do (
     set "test=!upper:*#%%c=!" 
     if "!test:~0,1!"=="!c!" (
      set c=!test:~1,1! 
REM  ) else (
REM   set "test=!lower:*#%%c=!" 
REM   if "!test:~0,1!"=="!c!" set c=!test:~1,1! 
     ) 
    ) 
    ) 
    set "rtn=!rtn!!c!" 
) 
    if "%~2"=="" (
    echo:!rtn! 
    exit /b 
) 
    :: The remainder is "Jeb magic" used to transfer the rtn value across the function endlocal barrier 
    if defined rtn (
    set "rtn=!rtn:%%=%%~A!" 
    set "rtn=!rtn:"=%%~B!" 
    if not defined NotDelayedFlag set "rtn=!rtn:^=^^^^!" 
) 
    if defined rtn if not defined NotDelayedFlag set "rtn=%rtn:!=^^^!%" ! 
    set "replace=%% """" 
    for /f "tokens=1,2" %%A in ("!replace!") do (
    endlocal 
    endlocal 
    set "%~2=%rtn%" ! 
) 
exit /b 

這裏是輸出。

var is: AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz! 
var is: @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! 
Press any key to continue . . . 
相關問題