您好我想看看是否有人可以查看我制作的批处理文件...选择命令无效...感谢您的帮助 (运行win8) 这是代码
@echo off
echo welcome to Vip3r coding and programming Antivirus install wizard
pause
echo Express Install
echo Custom Install (WIP)
set /p choice=Express installation or install with custom setings? (type Express or Custom)
if not '%choice%'== set choice=%choice:~0,1%
if '%choice%'=='Express' goto :choice1
if '%choice%'=='Custom' goto :choice1
:choice 1
pause
cls
color 04
echo you shouldn't have done that
pause
cls
msg* Backd00r install complete
答案 0 :(得分:1)
"不工作"是一个毫无意义的描述。如果 "正在工作",你不会问一个问题,不是吗?您需要告诉我们实际发生了什么以及预期会发生什么 - 否则,我们会猜测。
但是,您需要了解if
声明
if not '%choice%'== set choice=%choice:~0,1%
if '%choice%'=='Express' goto :choice1
if '%choice%'=='Custom' goto :choice1
IF
需要四个元素。要比较的两个参数,一个比较运算符和一些事情,如果比较是真的。
if not '%choice%'== set choice=%choice:~0,1%
将'%choice%'
与set
进行比较,如果不等于(==),则执行choice=%choice:~0,1%
。
无论choice
的价值如何,'%choice%'
永远不会等于set
,因此执行命令choice=%choice:~0,1%
- 这是无效的命令。
如果您想知道choice
是否设置为任何值,那么您可以使用
if '%choice%'=='' set something
或
if "%choice%"=="" set something
或(我的偏好)
if defined choice set something
单引号简单而舒适#39;我们的想法是确保==
运算符的两边完全相同的和不为空。有些人使用x
或.
或其他符号 - 并不一定"匹配"。所需要的只是两个字符串可能匹配。
双引号版本更好,因为cmd
将双引号之间的字符串视为单个项目,因此用户键入some response including spaces
然后将"%choice%"
视为单个字符串。
("选择"顺便说一下,对于变量名称来说是一个很差的,如果是逻辑的,呃选择 - 因为choice
是一个cmd
关键字)
if defined
方法仍然更强(并且输入速度更快。)它并不关心值是什么 - 只是值是否存在。
另外两行 - 没有实际问题 - 但请记住' vs " 问题。 goto
中的冒号不是必需的(或恕我直言),但无害。
代码的问题在于您没有注意到键入的字符串既不是指定字符串的可能性。批次没有'部分的概念'或者'程序' - 标签只是一个标记,不再是 - 因此它将逐行控制,直到它到达文件结尾或goto
语句(但可能被说服用一点{ {1}})
因此,即使您指定的字符串都不匹配,该过程也会进入下一个call
例程的语句。
答案 1 :(得分:0)
关于the choice command is not working
:你没有使用choice
命令,但实际上是一个choice命令 - 这甚至比你的命令要好得多set /p
方法,因为它只接受定义的键:
@echo off
choice /c EC /N /M "Express installation or install with custom setings? [E]xpress or [C]ustom: "
call :label%errorlevel%
echo done.
pause
goto :eof
:label1 [Express]
echo express install
goto :eof
:label2 [Custom]
echo custom install
goto :eof