0
我想制作一个批处理脚本来保存射箭中的分数。 当我运行它,并输入分数1,2,3为第1,第2和第3箭头我的预期成果是:如何在批处理脚本中使用数组?
Scores:
1st arrow: 1
2nd arrow: 2
3rd arrow: 3
-
Total score: 6
Maximum possible score: 15
Accuracy: 40%
相反,我得到的输出:
Scores:
1st arrow:
2nd arrow:
3rd arrow:
-
Total score: 6
Maximum possible score: 15
Accuracy:
代码:
@echo off
color 0f
title Archery Score Logger
:askForConfig
set configFile=defaultConfig.cfg
cls
echo What config file would you like to use?
echo Leave blank for default config.
set /p configFile=Input:
if exist %configFile% (
goto loadConfig
) else (
echo Error!
echo The specified file does not exist.
pause
goto askForConfig
)
:loadConfig
(
set /p colour=
set /p numOfArrows=
set /p maxScorePerArrow=
)<%configFile%
color %colour%
:mainMenu
cls
echo Main Menu
echo -
echo 1 to input scores
echo 2 to exit
echo -
set /p menuChoice=Input:
if %menuChoice% == 1 (
set arrowInputCount=1
set totalScore=0
set numOfXs=0
cls
goto inputScores
) else if %menuChoice% == 2 (
exit
)
:inputScores
cls
if %arrowInputCount% gtr %numOfArrows% (
echo Done!
pause
goto output
)
set suffix=th
if %arrowInputCount% equ 1 (
set suffix=st
) else if %arrowInputCount% equ 2 (
set suffix=nd
) else if %arrowInputCount% equ 3 (
set suffix=rd
)
echo Input the score for the %arrowInputCount%%suffix% arrow ^(%numOfArrows% total arrows^).
echo Range: ^(1-%maxScorePerArrow%^), 'm' for miss, 'x' for an x.
set /p arrow[arrowInputCount]=Input:
if %arrow[arrowInputCount]% geq 1 (
if %arrow[arrowInputCount]% leq %maxScorePerArrow% (
set /a totalScore+=%arrow[arrowInputCount]%
set /a arrowInputCount+=1
goto inputScores
)
) else if %arrow[arrowInputCount]% == m (
set /a arrowInputCount+=1
goto inputScores
) else if %arrow[arrowInputCount]% == x (
set /a totalScore+=%maxScorePerArrow%
set /a arrowInputCount+=1
goto inputScores
)
echo Error!
echo The value you entered was invalid.
pause
goto inputScores
:output
set /a maxPossibleScore=%numOfArrows%*%maxScorePerArrow%
set /a accuracy=%totalScore%/(%maxPossibleScore%/100)
set outputCount=1
cls
echo Scores:
:outputLoop
set suffix=th
if %outputCount% equ 1 (
set suffix=st
) else if %outputCount% equ 2 (
set suffix=nd
) else if %outputCount% equ 3 (
set suffix=rd
)
if %outputCount% leq %numOfArrows% (
echo %outputCount%%suffix% arrow: %arrow[outputCount]%
set /a outputCount+=1
goto outputLoop
)
echo -
echo Total score: %totalScore%
echo Maximum possible score: %maxPossibleScore%
echo Accuracy: %accuracy%^%
echo -
pause
exit
我认为问题是与数组,但读了他们之后,我仍然看不到我的代码有问题。 我看到他们固定它通过添加一条线,上面写着几个类似的问题:
setlocal EnableDelayedExpansion
,但我试过之后@echo在程序开始加入其关闭,它什么也没有改变。
0f
3
5
所有数组管理细节都在[数组,链表和其他数据结构中的cmd.exe(批处理)脚本]中进行了详细说明(https://stackoverflow.com/questions/10166386/arrays-linked-lists-and-其他数据结构 - 在-CMD-EXE分批脚本/ 10167990#10167990) – Aacini