2014-05-10 25 views
1

這是我調用其他批處理文件的短批處理程序。代碼如下。批量「轉到」或IF語句導致不同的代碼塊

@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進行排序,但沒有顯示錯誤消息。請幫忙。

回答

0

好吧,我問周圍的進一步...對外來這個網站,並終於得到了答案,認爲我應該在這裏分享,

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

:disasm 
@call makeline 
@call disassembler 
pause 
goto end 

我要補充

pause 
goto end 
每個

的功能塊和goto end在最後的if塊的末尾,使其按照我想要的方式工作。感謝您的回覆和意見。 Max Chu解決方案的信用;我的一個朋友。

2

如果您輸入1,它將會是GOTO disasm,但是在達到:disasm時,它將落入:image然後:view,並因此調用報告。你的意思是在每個區塊之後加入GOTO choice

+0

其實這將是下一個增強。不過,我也嘗試添加GOTO選擇,但它仍然沒有按預期調用反彙編程序文件。順便說一下,我想知道它是如何下降到 :disasm 如何解決它? – mikey13579