批量||我在从 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="
我在读取文本文件时遇到问题。 当我尝试从文本文件加载变量时,它们只是 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="