2017-01-17 109 views
1

您好我想優化下面批處理腳本爲單行代碼。我嘗試了多種方式,但無法做到。你能幫我在這裏優化下面的代碼。如何優化我的批處理腳本代碼

IF "%EnvName%"=="UT" (SET EnvName=UT) 
IF "%EnvName%"=="UT1" (SET EnvName=UT) 
IF "%EnvName%"=="UT2" (SET EnvName=UT) 
IF "%EnvName%"=="ST" (SET EnvName=ST) 
IF "%EnvName%"=="ST1" (SET EnvName=ST) 
IF "%EnvName%"=="ST2" (SET EnvName=ST) 
IF "%EnvName%"=="ST3" (SET EnvName=ST) 
IF "%EnvName%"=="SIT" (SET EnvName=SIT) 
IF "%EnvName%"=="SIT1" (SET EnvName=SIT) 
IF "%EnvName%"=="SIT2" (SET EnvName=SIT) 
IF "%EnvName%"=="SIT3" (SET EnvName=SIT) 
IF "%EnvName%"=="SIT4" (SET EnvName=SIT) 
IF "%EnvName%"=="UAT" (SET EnvName=UAT) 
IF "%EnvName%"=="UAT1" (SET EnvName=UAT) 
IF "%EnvName%"=="UAT2" (SET EnvName=UAT) 
IF "%EnvName%"=="UAT3" (SET EnvName=UAT) 
IF "%EnvName%"=="UAT4" (SET EnvName=UAT) 
IF "%EnvName%"=="SND" (SET EnvName=SND) 
IF "%EnvName%"=="SND1" (SET EnvName=SND) 
IF "%EnvName%"=="SND2" (SET EnvName=SND) 
IF "%EnvName%"=="SND3" (SET EnvName=SND) 
IF "%EnvName%"=="SND4" (SET EnvName=SND) 
IF "%EnvName%"=="DEVL" (SET EnvName=DEVL) 
IF "%EnvName%"=="DM" (SET EnvName=DM) 
+3

您需要做的只是刪除結尾的數字還是有額外的檢查? –

+1

我投票結束這個問題,因爲它可能更適合[CodeReview](http://codereview.stackexchange.com/)。 – aschipfl

+0

規範是不完整的:當'%EnvName%'不_包含任何列出的值時,結果應該是什麼?否則,像「IF」%EnvName%「==」DEVL「(SET EnvName = DEVL)''這樣的行沒有意義...請參閱[我的答案](http://stackoverflow.com/questions/41696769/how-to -optimise-MY-批處理腳本代碼/ 41699900#41699900) – Aacini

回答

2
@echo off 
REM EnvName gets set somewhere here 
set "numbers=1 2 3 4 5 6 7 8 9 0" 
for %%a in (%numbers%) do (
    if "%EnvName:~-1%"=="%%a" (
    set "EnvName=%EnvName:~0,-1%" 
    goto :nextStep 
) 
) 
:nextStep 
echo %EnvName% 

遍歷所有數字,檢查是否您的變量的最後一個字符等於其中之一。如果是這樣,它會刪除最後一位數字,然後進入下一步,在我的情況下只是回顯變量。

例與%EnvName%=DLM3 - >DLM

注:這將刪除最後一個字符,如果它是一個數字沒有任何更多!

+0

感謝,它的工作 –

+0

@ Sreenivas.konuganti注意通過單擊問題旁邊的灰色勾號,你可以(也應該)接受一個答案。這不僅有助於保持系統清潔,還會獎勵你! – geisterfurz007

0
@echo off 
setlocal EnableDelayedExpansion 

rem Define the sets of valid names: 
set "set[UT]=2, set[ST]=3, set[SIT]=4, set[UAT]=4, set[SND]=4, set[DEVL]=0, set[DM]=0" 

set "digits=123456789" 


rem The Value: 
set "EnvName=%1" 


rem Separate parts 
set "base=%EnvName:~0,-1%" 
set "last=%EnvName:~-1%" 

rem If last char is a digit 
if "!digits:%last%=!" neq "%digits%" (

    rem Check the digit vs. max value 
    if "%last%" leq "!set[%base%]!" set "EnvName=%base%" 

) else (

    rem Check the value vs. defined sets 
    if defined set[%EnvName%] set "EnvName=%EnvName%" 

    rem Note that previous IF is meaningless, unless an ELSE is inserted here 
    rem or a different variable is used for the result 

)