Batch file 如何优化批处理脚本代码

Batch file 如何优化批处理脚本代码,batch-file,Batch File,嗨,我想把下面的批处理脚本优化成单行代码。我尝试了多种方法,但都做不到。你能帮我优化下面的代码吗 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 "%Env

嗨,我想把下面的批处理脚本优化成单行代码。我尝试了多种方法,但都做不到。你能帮我优化下面的代码吗

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)
循环所有数字并检查变量的最后一个字符是否等于其中一个。如果是这样,它将删除最后一个数字并转到下一步,在我的例子中,这只是回显变量

%EnvName%=DLM3
->
DLM


注意:这将仅删除最后一个字符,如果它是数字,则不再删除

您所需要做的就是删除结尾数字或是否有任何其他检查?我在这里投票结束这个问题,因为它可能更适合您。规范不完整:当
%EnvName%
不包含任何列出的值时,结果应该是什么?否则,像
这样的行如果“%EnvName%”==“DEVL”(SET EnvName=DEVL)
没有意义。。。请参见@Sreenivas.konuganti注意,您可以(也应该)通过单击问题旁边的灰色复选标记接受答案。这不仅有助于保持系统的清洁,而且会奖励您!
@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

)
@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

)