我正在尝试创建一个批处理文件,该文件向用户询问具有多个(四个)选项的问题。用户选择的选项应触发批处理文件忽略四个选项之一。
让我们说我通常想要运行的命令是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.
也许是因为我今天早些时候开始工作,但我现在想不出更简单的方法。所以我希望听到你关于如何减少这个批处理脚本的想法。
答案 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