批量||我在从 txt 文件加载变量时遇到问题

Batch || I am having problems loading variables from txt file

我在读取文本文件时遇到问题。 当我尝试从文本文件加载变量时,它们只是 return 空白,但是当我 'type' 它们时,它们 return 完全正常。

我用来读取和保存文件的代码(basecd是bat文件的目录):

:loadGame
cls
echo Saves:
cd Data\Saves\
dir /a:d /b
echo[
cd %~dp0
echo %~dp0
set /p filename=Name of save file: 
echo[
if "%filename%" EQU "" (
echo File does not exist...
pause
goto menuLoop


)
if exist "Data/Saves/%filename%" (
    cd %basecd%Data\Saves\%filename%\
    echo %basecd%Data\Saves\%filename%\
    echo Loading File...
    set /p name=<%basecd%Data\Saves\%filename%\name.txt
    set /p race=<%basecd%Data\Saves\%filename%\race.txt
    set /p hair=<%basecd%Data\Saves\%filename%\hair.txt
    set /p eyes=<%basecd%Data\Saves\%filename%\eyes.txt
    set /p area=<%basecd%Data\Saves\%filename%\area.txt
    set /p quest_starter=<%basecd%Data\Saves\%filename%\quest_starter.txt
    type %basecd%Data\Saves\%filename%\area.txt
    echo %name%
    echo %quest_starter%
    echo %area%
    echo File loaded
    pause
    goto mainLoop

)

echo File does not exist...
pause
goto menuLoop

这是我用来写入文件的代码,但我可以在我的计算机上看到文件在文件夹中并且不是空的。

:event_generic_save_game
cls
echo Save file name:
:saveloop
set /p filename=    
if "%filename%" EQU "" (
    echo File name is invalid!
    goto saveloop
)

if exist "Data\Saves\%filename%" (
    echo Save file already exists. 
    set /p input=Overwrite? y/n 
    if "%input%" EQU "n" (
        echo Save canceled
        set /p buffer= 
        cls
        goto mainLoop
    )

)

echo saving game '%filename%'...

if exist "Data\Saves\%filename%" (
    del Data\Saves\%filename%
)
mkdir Data\Saves\%filename% 
echo %area%>Data\Saves\%filename%/area.txt
echo %hair%>Data\Saves\%filename%/hair.txt
echo %eyes%>Data\Saves\%filename%/eyes.txt
echo %race%>Data\Saves\%filename%/race.txt
echo %name%>Data\Saves\%filename%/name.txt
echo %quest_starter%>Data\Saves\%filename%/quest_starter.txt
echo Game saved
pause
cls
goto mainLoop

'set /p buffer=' 是 'pause'

的替代

请帮忙,我这几天一直在思考这个问题,我无法克服它。 感谢阅读

请注意,\是批处理中的路径分隔符,/引入swiches。 有时 批量进行翻译。不总是....

这与您的明显问题无关。请在 SO 上查看关于 delayed expansion

的无尽项目

在块语句 (a parenthesised series of statements) 中,解析 整个 块并执行 then。块中的任何 %var% 将被该变量的值替换 在块被解析时 - 在执行块之前 - 同样的事情适用于 FOR ... DO (block).

因此,IF (something) else (somethingelse) 将在遇到 IF 时使用 %variables% 的值执行。

在您的例子中,您改变了块内的值,因此您看到的是 原始 值,而不是 更改后的 值。

游戏生成提示:

如果您保留一个字符作为您要保存的变量的前缀(例如,我想要 save/reload 的所有变量都以 # 开头),那么您只需要 保存一场比赛是

set #>"mygamefile.txt"

你需要重新加载一个游戏

for /f "usebackqdelims=" %%a in ("mygamefile.txt") do set "%%a"

要清除所有 # 变量(在重新加载游戏之前有用)使用

for /f "delims==" %%a in ('set # 2^>nul') do set "%%a="