【问题标题】:Batch "goto" or IF statement leads to a different block of code批量“goto”或 IF 语句导致不同的代码块
【发布时间】:2014-05-10 17:34:42
【问题描述】:

这是一个简短的批处理程序,用于调用其他批处理文件。代码如下。

@echo off
setlocal EnableExtensions EnableDelayedExpansion
:choice
cls
@call makeline
echo Choose an action from below:
@call makeline
echo.
echo 1. Disassemble a suspect malware.
echo 2. Image a disk drive.
echo 3. Generate MD5 hash of a file.
echo 4. View Report.
echo 5. Exit Malverse 1.2
echo.
@call makeline

set "ch=%gch1%"
goto :chCheck
:chPrompt
echo Select by typing in the number [1-5] and hit the RETURN key.
set /p "ch=[1-5]: "
:chCheck
if not defined ch goto :chPrompt
echo %ch%
pause

if %ch% == 1 (
set ch=
GOTO disasm
)

if %ch% == 2 (
set ch=
GOTO image
)

if %ch% == 3 (
set ch=
GOTO hash
)

if %ch% == 4 (
set ch=
GOTO view
)

:hash
@call makeline
@call hasher

:disasm
@call makeline
@call disassembler

:image
@call makeline
@call imager

:view
@call makeline
@call report

pause
endlocal

这个程序应该给出输出,比如说,如果我从菜单中输入 1 作为选项,它应该调用反汇编文件。

Option: 1
Disassembler 2.2.

但是,它没有这样做,而是继续调用报告文件,该文件应该只能由选项 4 调用。在使用 3 作为选项运行另一个测试后,这一次,它调用了哈希文件,但又一次稍后也会调用报告文件。

测试用例:1 个结果

Option: 1
Report viewer opened.

测试用例:3 个结果

Option: 3
Hasher begins here.
Report viewer opened. 

很好奇,我还检查了文件名,它似乎完全匹配。我检查了一些网站,但无济于事。此外,我尝试在代码顶部使用 @echo 进行调试,但没有显示错误消息。请帮忙。

【问题讨论】:

    标签: batch-file block goto


    【解决方案1】:

    如果您输入 1,它将是 GOTO disasm,但在达到 :disasm 时,它将下降到 :image,然后是 :view,因此调用报告。您的意思是在每个块之后包含GOTO choice

    【讨论】:

    • 实际上这将是下一个增强功能。但是,我也尝试添加 GOTO 选项,但它仍然没有按预期调用反汇编程序文件。对了,我想知道它是怎么落到 :disasm 怎么解决的?
    【解决方案2】:

    好的,我在这个网站外部询问了更多......终于得到了答案,我想我应该在这里分享它,

    if %ch% == 4 (
    set ch=
    GOTO view
    )
    goto end
    
    :disasm
    @call makeline
    @call disassembler
    pause
    goto end
    

    我要补充

    pause
    goto end
    

    在每个功能块和最后一个if 块末尾的goto end 使其按我想要的方式工作。感谢您的回复和意见。 Max Chu的解决方案的学分;我的一个朋友。

    【讨论】:

      猜你喜欢
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 2021-06-10
      • 2020-06-27
      • 1970-01-01
      相关资源
      最近更新 更多