2012-09-22 30 views
0

我正在製作一個批處理遊戲,在一個名爲「Score.txt」的單獨文件中計數高分。 在那個文件中,它讀取一個數字,但是當你贏得比賽時,我希望它被下一個最高數字覆蓋。 EG .. 0是多少,我贏了比賽,現在它讀取1從文件中批量添加(+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打開了。

+0

你確定這個問題是因爲ECHO處於關閉狀態?看起來好像4線中的'!score!'不應該在那裏 - 它應該是'score = %% i'。並且後面的'%得分%'實例應該都是'!score!'。 –

+0

請參閱下面的答案 - 它每次運行時都會增加score.txt中的值... –

回答

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 
+1

使用SET/A時不需要擴展。你也可以使用'set/a score = score + 1',或者更好的是'set/a score + = 1' – dbenham

2

詹姆斯·L的回答肯定可以解決問題,但並沒有解釋爲什麼原來沒有工作。

正如James L.在他的評論中指出的那樣,FOR語句中不需要!score!,儘管它沒有任何傷害,因爲它沒有定義。

此問題不需要延遲擴展。

原始代碼失敗的原因是set /a %score%=%score%+1的第一次擴展。該語句將創建一個數字作爲名稱的變量。它應該已經閱讀set /a score=%score%+1set /a score=score+1set /a score+=1

有一個替代使用FOR/F

@echo off 
set "score=" 
<"Score.txt" set /p "score=" 
set /a score+=1 
>"Score.txt" echo %score%