0

我正在制作一个批处理游戏,它在一个名为“Score.txt”的单独文件中计算高分。在该文件中,它读取一个数字,但是当您赢得比赛时,我希望它被下一个最高数字覆盖。EG.. 0 是数字,我赢了比赛,现在显示为 1。

到目前为止,这是我的高分代码......

:Score
SetLocal EnableDelayedExpansion
set score=
for /F "delims=" %%i in (Score.txt) do set score=!score! %%i
set /a %score%=%score%+1 
echo %score% >score.txt
exit

但是“Score.txt”只有在我赢了 ECHO 后才会读取。

4

2 回答 2

2

我认为这就是你想要做的:

:Score
SetLocal EnableDelayedExpansion
set score=
for /F "delims=" %%i in (Score.txt) do set score=%%i
set /a score=!score!+1 
echo !score! >score.txt
于 2012-09-22T07:05:59.147 回答
2

詹姆斯 L. 的回答肯定解决了问题,但没有解释为什么原来的不起作用。

正如 James L. 在他的评论中指出的那样,!score!FOR 语句中不需要,尽管它没有造成任何伤害,因为它是未定义的。

此问题不需要延迟扩展。

原始代码失败的原因是set /a %score%=%score%+1. 该语句将创建一个以数字为名称的变量。它应该是set /a score=%score%+1, or set /a score=score+1, or set /a score+=1

使用 FOR /F 有另一种选择

@echo off
set "score="
<"Score.txt" set /p "score="
set /a score+=1
>"Score.txt" echo %score%
于 2012-09-22T18:35:19.350 回答