批处理||我在从txt文件加载变量时遇到问题
问题描述:
我在从文本文件中读取时遇到问题。 当我尝试从文本文件加载变量时,它们只是返回空白,但当我键入它们时,它们完全恢复正常。批处理||我在从txt文件加载变量时遇到问题
我用它来读取和保存文件(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
“设置/ P缓冲=”是在“暂停”
请帮帮忙,我一直在反复思考这个天立场,我不能克服它。 谢谢您的阅读
答
请注意,\
是批处理的路径分隔符,/
引入了swiches。 有时批处理翻译。不总是......
这与你的明显问题无关。请参阅无尽的项目上SO约delayed expansion
在一个块内声明(a parenthesised series of statements)
,该整个块进行解析,并然后执行。该块内的任何%var%
将在该块被解析时由该变量的值取代 - 在块执行之前 - 同样的事情适用于FOR ... DO (block)
。
因此,在遇到IF
时,将使用%variables%
的值执行IF (something) else (somethingelse)
。
在你的情况,你是块内的不同的价值观,因此你看到原值,而不是改变值。
提示游戏代:
如果你要订一个字符作为前缀的变量,你想学,以保存(如我想保存/重载与#
启动所有变量),那么你需要的到保存游戏是
set #>"mygamefile.txt"
,所有你需要重装一个游戏
for /f "usebackqdelims=" %%a in ("mygamefile.txt") do set "%%a"
扎普所有#
变量(有用重装比赛前)使用
for /f "delims==" %%a in ('set # 2^>nul') do set "%%a="
你可以尽量减少代码块,如果你回复了'是否存在...''到,如果不存在...'的'回声文件不存在......'没有任何变量,在括号中被括起来并不重要。 – LotPings