【问题标题】:Review of batch file?审查批处理文件?
【发布时间】:2015-02-23 01:20:28
【问题描述】:

您好,我正在寻找是否有人可以查看我制作的批处理文件...选择命令不起作用...感谢您的帮助 (运行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

【问题讨论】:

    标签: file batch-file


    【解决方案1】:

    “不工作”是一个毫无意义的描述。如果它“工作”,你就不会问问题了,对吗?您需要告诉我们实际发生了什么以及您预期会发生什么 - 否则,我们只是在猜测。

    不过,你需要了解if 声明

    if not '%choice%'== set choice=%choice:~0,1%
    if '%choice%'=='Express' goto :choice1
    if '%choice%'=='Custom' goto :choice1
    

    IF 需要四个元素。两个要比较的参数,一个比较运算符和某事要做的事情,如果-the-comparison-is-true。

    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
    

    单引号只是“舒适”。这个想法是确保== 运算符的两边完全 相同并且 不为空。有些人使用x. 或其他一些符号——不一定“匹配”。所需要的只是两个字符串可能匹配。

    双引号版本更好,因为cmd将双引号之间的字符串视为单个项目,因此如果用户键入some response including spaces,则"%choice%"将被视为单个字符串。

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

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

    另外两行 - 没有实际问题 - 但请记住 '" 问题。goto 中的冒号不是必需的(或者,恕我直言,可取) 但无害。

    代码的问题在于您没有考虑到键入的字符串不是指定的字符串的可能性。批处理没有“节”或“程序”的概念——标签只是一个标记,不再是——因此它将逐行继续,直到它到达文件结尾或goto 语句(但可能用call被说服绕道而行)

    因此,即使您指定的两个字符串都不匹配,该过程将继续执行下一条语句,即choice1 例程。

    【讨论】:

    • edit* 我希望它是这样的关闭速度比我读的快 P.S 我是一个绝对的 NOOB 所以我不明白你在你的帖子中说什么
    • 用于故障排除的 @SgtVip3r 不是由 DoubleClick 运行的,而是打开一个命令提示符窗口并从那里执行它,因此该窗口保持打开状态以读取任何错误消息。同时删除 @echo off 以查看真正执行的内容。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      相关资源
      最近更新 更多