這個問題在這里已經有了答案: GOTO :EOF 回傳到哪里? (4 個回答) 5 天前關閉。
我有一個批處理檔案,它為檔案中的每個專案執行一系列功能。它運行正常,但是由于某種原因,它對檔案中的最后一行執行了兩次操作。誰能幫我確定原因?這是我自己制作的第一個 for 回圈,所以我確信我犯了一些錯誤。
for /F "tokens=*" %%A in (nations.txt) do (
set "nationname=%%A"
call :ageofdiscovery
)
澄清一點,我要做的是一次呼叫“nations.txt”的每一行,將它們存盤為一個變數,然后使用該變數執行一系列精心設計的操作,然后再繼續下一個行,并貫穿整個“nations.txt”。這個想法是允許腳本為任意數量的回圈作業,從而使腳本更加靈活(它是一個文本生成器,為幻想王國創建歷史)。
如果 for 回圈沒有問題,有人可以解釋為什么它重復最后一個輸出嗎?我在回圈之后有一個退出命令,所以它不應該再次執行腳本,并且對于重復的最后一行,它也有相同的隨機生成的輸出。
編輯:根據要求,nations.txt 的當前內容是:
Nation1
Nation2
Nation3
Nation4
至于批處理腳本本身,它有 2,134 行長(并且在國家選擇系統的硬編碼版本中運行得非常好。我在這里修改代碼)。我不確定可能會發生什么問題或在哪里發生任何問題。我也知道這里的人不希望我分享整個劇本。我會按照腳本本身的要求做。
uj5u.com熱心網友回復:
您觀察到的現象的最佳猜測是您的函式是在回圈之后直接定義的(您沒有顯示那個重要的細節)。
for /F "tokens=*" %%A in (nations.txt) do (
set "nationname=%%A"
call :ageofdiscovery
)
:ageofdiscovery
echo %nationname%
在這種情況下,函式代碼將在回圈結束后執行,因為批處理檔案沒有函式的概念,它們只知道標簽。
它可以很容易地通過一個exit /b或goto :eof
for /F "tokens=*" %%A in (nations.txt) do (
set "nationname=%%A"
call :ageofdiscovery
)
exit /b
:ageofdiscovery
echo %nationname%
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/492138.html
標籤:批处理文件
