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

时间:2016-11-05 06:16:48

标签: file batch-file readfile

我在阅读文本文件时遇到问题。 当我尝试从文本文件加载变量时,它们只返回空白,但是当我键入'他们,他们恢复正常。

我用来读取和保存文件的代码(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

&#39;设置/ p缓冲区=&#39;支持&#39;暂停&#39;

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

1 个答案:

答案 0 :(得分:1)

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

这与你明显的问题无关。关于delayed expansion

,请参阅关于SO的无尽项目

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

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

在您的情况下,您要更改块内的值,因此您会看到原始值,而不是更改值。

游戏生成提示:

如果您保留一个字符作为变量的前缀 - 您想要保存(例如,我想要保存/重新加载的所有变量都以#开头),那么您只需要保存

set #>"mygamefile.txt"

你需要重新加载游戏

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

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

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