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

批处理||我在从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缓冲=”是在“暂停”

请帮帮忙,我一直在反复思考这个天立场,我不能克服它。 谢谢您的阅读

+1

你可以尽量减少代码块,如果你回复了'是否存在...''到,如果不存在...'的'回声文件不存在......'没有任何变量,在括号中被括起来并不重要。 – LotPings

请注意,\是批处理的路径分隔符,/引入了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=" 
+0

不要错过usebackq和分隔符之间的空格。 – soja

+0

@soja:AFAIAA,空间是可选的。你能否提供一个需要它的地方的例子? – Magoo

+1

选项字符串中的所有空格都是可选的,但为了便于阅读,我建议将它们插入... – aschipfl