我在阅读文本文件时遇到问题。 当我尝试从文本文件加载变量时,它们只返回空白,但是当我键入'他们,他们恢复正常。
我用来读取和保存文件的代码(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;
请帮忙,我一直在思考这几天,但我无法克服它。 感谢您阅读
答案 0 :(得分:1)
请注意,\
是批量路径分隔符,/
引入了swiches。 有时批处理会进行翻译。并非总是......
这与你明显的问题无关。关于delayed expansion
在块语句(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="