批处理中出现未知故障

时间:2018-02-10 13:33:09

标签: batch-file debugging

我需要帮助解决最近在Windows 10上执行的批处理文件中的未知问题。

适当的功能:
我正在尝试进行数学测验,生成两个数字,一个基本操作数(+-x/),找到答案,然后根据用户的答案进行检查。此外,该程序用于在用户输入答案后跟踪某些信息。 (问题编号,问题和答案以及用户响应。)

我的问题:
在某些情况下,程序将在"游戏中显示问题/答案。窗口,而不是按预期在文本文件中写入问题/答案。

命令是:

echo [Q]%m%>>"C:\Users\%username%\Desktop\%fname%.txt"

这是在下面的代码中标注的评论。

我为解决这个问题做了些什么? 在测试下降后,我发现问题似乎围绕着它试图移动问题/答案组合部分作为操作的部分。这有所帮助,但问题在未来的调试尝试中随机出现。

虽然我觉得同时问两件事有点不好意思我还有两件事。

  1. 为什么%a%%b%%c%=%d%acd为数字且b/的操作如此在我的代码中一致地破坏某个命令,我该如何修复它?

  2. 为什么同样的问题仍然随机出现,即使我删除了/的所有痕迹,这似乎首先引起了我的问题。

  3. 这是批处理文件:

    ::Initialization
    @echo off
    set /a prb=3
    set file=Stat
    set sss=s.
    if %prb%==1 set tst=.
    echo.
    echo Welcome to math fire, you will get randomly generated 
    echo multiplication, addition, and subtraction problems. You 
    echo will go through a specified number before the game ends 
    echo and this window closes. You will be tracked in a file on 
    echo your desktop. You will have %prb% problem%sss%
    echo.
    pause
    CLS
    echo Get ready
    timeout 5
    set start=%time%
    CLS
    set /a num=1
    set /a good=0
    set /a bad=0
    ::===========================Set up beggining of stat file.
    echo =-=-=-=-=-=>>"C:\Users\%username%\Desktop\%fname%.txt"
    echo ===Start===>>"C:\Users\%username%\Desktop\%fname%.txt"
    echo =-=-=-=-=-=>>"C:\Users\%username%\Desktop\%fname%.txt"
    echo.>>"C:\Users\%username%\Desktop\%fname%.txt"
    ::===================================Main Body============
    ::[A] Num1 [B] Operator [C] Num2 [D] Answer [E] The problem [M] Problem and answer
    :main
    set /a a=%random% %% 30 + 1 
    
    ::To remove the division section I changed the 4 below to 3
    set /a b=%random% %% 4 + 1
    
    set /a c=%random% %% 20 + 1 
    if %b%==1 set b=+
    if %b%==2 set b=-
    if %b%==3 set b=*
    if %b%==4 set b=/
    set /a d=%a%%b%%c%
    set e=%a%%b%%c%
    echo.
    echo =============================%e%=?
    echo.
    timeout 1
    set /p ans=+++++++++++++++++++++++++++++Answer:
    set m=%e%=%d%
    echo ===%num%===>>"C:\Users\%username%\Desktop\%fname%.txt"
    
    ::The following line is the glitching code
    echo [Q]%m%>>"C:\Users\%username%\Desktop\%fname%.txt"  
    
    echo [A]%ans%>>"C:\Users\%username%\Desktop\%fname%.txt"
    echo.>>"C:\Users\%username%\Desktop\%fname%.txt"
    if %ans%==%d% goto p
    CLS
    echo.
    echo -----------------------------Incorrect
    set /a bad=%bad%+1
    goto re
    :p
    CLS
    echo.
    echo -----------------------------Correct
    set /a good=%good%+1
    goto re
    :re
    if %num%==%prb% goto end
    set /a num=%num%+1
    goto main
    :end
    echo ===========>>"C:\Users\%username%\Desktop\%fname%.txt"
    echo.>>"C:\Users\%username%\Desktop\%fname%.txt"
    echo [Start]%start%>>"C:\Users\%username%\Desktop\%fname%.txt"
    echo [-End-]%time%>>"C:\Users\%username%\Desktop\%fname%.txt"
    echo [Right]%good%>>"C:\Users\%username%\Desktop\%fname%.txt"
    echo [Wrong]%bad%>>"C:\Users\%username%\Desktop\%fname%.txt"
    echo.>>"C:\Users\%username%\Desktop\%fname%.txt"
    echo =-=-=-=-=-=>>"C:\Users\%username%\Desktop\%fname%.txt"
    echo ===-End-===>>"C:\Users\%username%\Desktop\%fname%.txt"
    echo =-=-=-=-=-=>>"C:\Users\%username%\Desktop\%fname%.txt"
    echo.>>"C:\Users\%username%\Desktop\%fname%.txt"
    CLS
    echo.
    echo.
    echo.
    echo Congrats, check your desktop for your play info.
    echo.
    echo.
    echo.
    pause 
    exit
    

1 个答案:

答案 0 :(得分:1)

使用语法

>>"%filename1%"  echo [Q]%m%

(我的测试文件分配在变量中)

注意m将包含13/14=0

等字符串

重定向器重定向逻辑设备号之前的字符。您可以通过将redirction移动到命令的开头或在重定向器之前插入空格或使用

来解决此问题。
>>"%filename1%"  (
 echo [Q]%m%
 echo something else
 echo more text
)

(
 echo [Q]%m%
 echo something else
 echo more text
)>>"%filename1%"  

做同样的事情 - 收集echo es的输出并将sum-output重定向到文件。

哦,BTW - 批处理整数数学,所以13/4 = 3 - 没有小数。