在提示选择的批处理文件中,答案应触发脚本忽略一个选项

时间:2014-11-06 14:22:26

标签: windows batch-file if-statement cmd

我正在尝试创建一个批处理文件,该文件向用户询问具有多个(四个)选项的问题。用户选择的选项应触发批处理文件忽略四个选项之一。

让我们说我通常想要运行的命令是ECHO" A",ECHO" B",ECHO" C",ECHO&#34 ; d&#34 ;. 如果该人输入A,我希望他们仍然运行除ECHO" A"之外的所有其他命令。

目前我提出的解决方案如下

@echo off
set /p choice="Do you want not to do: A, B, C or D? [A/B/C/D] " [A/B/C/D]
if %choice%==A (
  ECHO "B"
  ECHO "C"
  ECHO "D"
  EXIT /b
) else if %choice%==B (
  ECHO "A"
  ECHO "C"
  ECHO "D"
  EXIT /b
) else if %choice%==C (
  ECHO "A"
  ECHO "B"
  ECHO "D"
  EXIT /b
) else if %choice%==D ( 
  ECHO "A"
  ECHO "B"
  ECHO "C"
  EXIT /b
) ELSE ( 
  ECHO Please select A, B, C or D!
  EXIT /b
)

然而,正如您可以想象的那样,我使用echo命令作为示例/抽象。实际命令更长。在A,B,C和D下定义一次命令似乎更有效,然后根据用户的选择告诉批处理文件不要执行A,B,C或D.

也许是因为我今天早些时候开始工作,但我现在想不出更简单的方法。所以我希望听到你关于如何减少这个批处理脚本的想法。

4 个答案:

答案 0 :(得分:2)

此代码中的想法是它只会跳过您选择的那个。

@echo off
set /p choice="Do you want not to do: A, B, C or D? [A/B/C/D] " [A/B/C/D]
if "%choice%"=="" (
    ECHO Please select A, B, C or D!
    EXIT /b
)
if not %choice%==A (
   ECHO "A"
) 
if not %choice%==B (
   ECHO "B"
) 
if not %choice%==C (
   ECHO "C"
) 
if not %choice%==D (
   ECHO "D"
) 
exit /b

答案 1 :(得分:1)

这样的事情:

@echo off
setlocal enabledelayedexpansion
set "$Command=A B C D"
set /p "$choice=Do you want not to do: A, B, C or D? "
set "$Command=!$Command:%$choice%=!"
for %%a in (!$command!) do echo %%a

答案 2 :(得分:0)

这应该可以解决问题。

在“CALL”之后,批次“跳回”并将执行下一步:

@echo off
set /p choice="Do you want not to do: A, B, C or D? [A/B/C/D] " [A/B/C/D]
if %choice%==A (
  CALL :B
  CALL :C
  CALL :D
  EXIT /b
) else if %choice%==B (
  CALL :A
  CALL :C
  CALL :D
  EXIT /b
) else if %choice%==C (
  CALL :A
  CALL :B
  CALL :D
  EXIT /b
) else if %choice%==D ( 
  CALL :A
  CALL :B
  CALL :C
  EXIT /b
) ELSE ( 
  ECHO Please select A, B, C or D!
  EXIT /b
)

:A
<Function here>
GOTO :EOF

:B
<Function here>
GOTO :EOF

:C
<Function here>
GOTO :EOF

:D
<Function here>
GOTO :EOF

答案 3 :(得分:0)

使用array可以轻松解决此类问题;代码更清晰,更灵活。我还建议您使用choice命令而不是set /P来实现此类选择。

@echo off
setlocal EnableDelayedExpansion

rem Define all the options/commands
set option[1]=ECHO "A"
set option[2]=ECHO "B"
set option[3]=ECHO "C"
set option[4]=ECHO "D"

choice /C ABCD /M "Do you want not to do: A, B, C or D"

rem Eliminate the not wanted option
set "option[%errorlevel%]="

rem Execute the remaining options
for /F "tokens=1* delims==" %%a in ('set option[') do %%b