0

晚上,我正在尝试列出可以在批处理脚本中设置为变量的几个单词。

例如:

set allowedvar=James
set secondallowedwar=Jane

if not %allowedvar% == James or John or Smith ( echo Not correct variable set for allowedvar )
if not %secondallowedwar% == Jane or Jennifer or Allice ( echo Not correct variable set for secondallowedwar )

所以在这种情况下,allowedvar只能设置为James,JohnSmithsecondallowedwar只能设置为Jane,JenniferAllice

如何在批处理脚本中实现这一点?

提前致谢 :)

4

3 回答 3

2
@echo off
setlocal EnableDelayedExpansion
set allowedValues=/James/John/Smith/
set /P allowedVar=Enter the name: 
if "!allowedValues:/%allowedVar%/=!" neq "%allowedValues%" (
   echo The name is valid
) else (
   echo Name NOT valid
)

编辑添加区分大小写的版本

上面的解决方案不区分大小写。对于区分大小写的,请使用:

@echo off
setlocal EnableDelayedExpansion
set allowedValues=/James/John/Smith/
set /P allowedVar=Enter the name: 
if "!allowedValues:/%allowedVar%/=!" neq "%allowedValues%" (
   echo Name matchs case insensitive
   if "!allowedValues:/%allowedVar%/=/%allowedVar%/!" equ "%allowedValues%" (
      echo Name matchs case sensitive
   )
) else (
   echo Name NOT matchs
)
于 2013-06-29T00:35:26.877 回答
1

像这样很容易做到:

rem allowed values, separated with spaces:
set allowed=James John Smith
for %%i in (%allowed%) do if "%1"=="%%i" goto ok
echo Invalid value: %1    
goto :eof

:ok
echo You picked: %1

此脚本使用第一个命令行参数 ( %1) 作为要测试的变量,但您可以使用任何您想要的东西来代替它。

于 2013-06-28T23:00:19.980 回答
0

很难说最好的方法,因为它取决于脚本的其余部分以及它是如何工作的,但是这样的事情应该可以工作:

IF %allowedvar%==James GOTO correctvar
IF %allowedvar%==John GOTO correctvar
IF %allowedvar%==Smith GOTO correctvar
::The following line will only run if none of the above IF statements succeeded
echo Incorrect variable value && pause && goto start

:correctvar
echo Hello %allowedvar%! Nice to see you!
于 2013-06-28T22:43:46.750 回答