晚上,我正在尝试列出几个可以在批处理脚本中设置为变量的单词。
例如:
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
,John
或Smith
,而secondallowedwar
只能设为Jane
},Jennifer
或Allice
如何在批处理脚本中实现这一点?
提前致谢:)
答案 0 :(得分: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
)
答案 1 :(得分: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
)作为要测试的变量,但您可以使用您想要的任何内容。
答案 2 :(得分: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!