2016-11-05 68 views
2

我在從文本文件中讀取時遇到問題。 當我嘗試從文本文件加載變量時,它們只是返回空白,但當我鍵入它們時,它們完全恢復正常。批處理||我在從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

回答

0

請注意,\是批處理的路徑分隔符,/引入了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