Batch file 批次;“转到”;或者如果语句导致不同的代码块

Batch file 批次;“转到”;或者如果语句导致不同的代码块,batch-file,block,goto,Batch File,Block,Goto,这里有一个简短的批处理程序,我用来调用其他批处理文件。代码如下 @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. Ge

这里有一个简短的批处理程序,我用来调用其他批处理文件。代码如下

@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作为选项运行另一个测试之后,这一次,它调用了hasher文件,但随后又调用了报告文件

测试用例:1个结果

Option: 1
Report viewer opened.
测试用例:3个结果

Option: 3
Hasher begins here.
Report viewer opened. 

出于好奇,我还检查了文件名,似乎完全匹配。我检查了一些网站,但没有结果。此外,我尝试在代码顶部使用@echo on对调试进行排序,但没有显示错误消息。请提供帮助。

如果输入1,它将
转到disasm
,但到达
:disasm
时,它将转到
:image
,然后
:view
并调用报告。你的意思是在每个区块后都包含
转到选项吗?

好的,我进一步询问了这个站点的外部,最后得到了答案,我想我应该在这里分享它

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解决方案的积分;我的一个朋友。

实际上,这将是下一个增强功能。然而,我也尝试过添加GOTO选项,它仍然没有像预期的那样调用反汇编程序文件。顺便说一句,我想知道它是如何落下的:灾难如何解决?