File 批处理文件的审查?

File 批处理文件的审查?,file,batch-file,File,Batch File,您好,我想看看是否有人可以查看我制作的批处理文件…choice命令不起作用…谢谢您的帮助 (运行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

您好,我想看看是否有人可以查看我制作的批处理文件…choice命令不起作用…谢谢您的帮助 (运行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
“不工作”是一个毫无意义的描述。如果它“起作用”,你就不会问问题了,是吗?您需要告诉我们实际发生了什么,以及您预计会发生什么,否则,我们只能猜测

尽管如此,您还是需要理解
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%'
设置
,如果相等(=),则执行
choice=%choice:~0,1%

无论
choice
的值是多少,
'%choice%'
永远不会等于
set
,因此将执行comand
choice=%choice:~0,1%
,这是一个无效的命令

如果您想知道
choice
是否设置为任何值,则可以使用

if '%choice%'=='' set something

或(我的偏好)

单引号是简单的“舒适”。这样做的目的是确保
==
操作符的两侧都是完全相同的,并且不为空。有些人使用
x
或其他符号,但不一定“匹配”。所需要的只是两个字符串可以匹配

双引号版本更好,因为
cmd
将双引号之间的字符串视为单个项目,因此如果用户键入
一些包含空格的响应,则
%choice%”
将被视为单个字符串

(“choice”顺便说一句,对于变量名来说是一个糟糕的,如果合乎逻辑的,呃-choice,因为
choice
是一个
cmd
关键字)

if-defined
方法更强大(输入更快)。它不关心值是什么,只关心值是否存在

其他两行-没有实际问题-但是记住“vs”问题。
goto
中的冒号不是必需的(或者,我不希望),而是无害的

代码的问题在于,您没有考虑到键入的字符串既不是指定的字符串,也不是指定的字符串。Batch没有“节”或“过程”的概念-标签只是一个标记,不再是-因此它将逐行继续,直到到达文件结尾或
goto
语句(但可能会被劝说绕道打一个
电话


因此,即使您指定的两个字符串都不匹配,该过程也将前进到下一个语句,即
choice1
例程。

关于
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

编辑*我希望它是这样的,如果你键入express或custom,它将转到choice one命令集并继续批处理文件,因为每当我键入express或custom时,它关闭的速度比我可以读取的速度快。P.我是一个绝对的NOOB,所以我不明白你在报告中说了什么post@SgtVip3r对于故障排除,请不要使用run双击,但打开一个命令提示符窗口并从那里执行,这样窗口将保持打开状态以读取任何错误消息。同时删除
@echo off
以查看实际执行的内容。
if defined choice set something
@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