我需要帮助解决最近在Windows 10上执行的批处理文件中的未知问题。
适当的功能:
我正在尝试进行数学测验,生成两个数字,一个基本操作数(+-x/
),找到答案,然后根据用户的答案进行检查。此外,该程序用于在用户输入答案后跟踪某些信息。 (问题编号,问题和答案以及用户响应。)
我的问题:
在某些情况下,程序将在"游戏中显示问题/答案。窗口,而不是按预期在文本文件中写入问题/答案。
命令是:
echo [Q]%m%>>"C:\Users\%username%\Desktop\%fname%.txt"
这是在下面的代码中标注的评论。
我为解决这个问题做了些什么? 在测试下降后,我发现问题似乎围绕着它试图移动问题/答案组合部分作为操作的部分。这有所帮助,但问题在未来的调试尝试中随机出现。
虽然我觉得同时问两件事有点不好意思我还有两件事。
为什么%a%%b%%c%=%d%
(a
,c
,d
为数字且b
为/
的操作如此在我的代码中一致地破坏某个命令,我该如何修复它?
为什么同样的问题仍然随机出现,即使我删除了/
的所有痕迹,这似乎首先引起了我的问题。
这是批处理文件:
::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
答案 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 - 没有小数。