2014-04-11 105 views
1

我最近給出的建議,從一個批處理腳本輸出變量到一個文本文件中使用出口批次變量文本文件

set $>savefile 

,並返回使用

for /f "delims=" %%a in (savefile) do set %%a 

在在另一種啓動的變量實現時,這不會創建帶有變量的文件,導致腳本中出現錯誤,從而導致批處理關閉。爲了彌補結束,我創建了一個檢查來顯示錯誤消息,但仍然無法獲取腳本將變量導出到文件中。

變量

::Variables 
set Location=Und 
set Name=Und 
set Gender=Und 
set Age=Und 
set Gold=0 
set Hunger=Satisfied 
set Illness=None 
set Wounds=None 
set CHP=10 
set MHP=10 
set CMP=0 
set MMP=0 
set DMG=(%STR%/5)+%RTWPDMG% 
set DFN=0+%HeadAR%+%NeckAR%+%Shoulder%+%Chest%+%Glove%+%Leg%+%Feet% 
set INT=1 
set DEX=1 
set STR=1 
set Head=---- 
set Shoulder=---- 
set Neck=---- 
set Chest=Shirt 
set Glove=---- 
set Leg=Pants 
set Feet=Shoes 
set LTWP=---- 
set RTWP=---- 
goto Start 

保存腳本

::Save 
:Save 
cls 
set $Location=%Location% 
set $Name=%Name% 
set $Gender=%Gender% 
set $Age=%Age% 
set $Gold=%Gold% 
set $Hunger=%Hunger% 
set $Illness=%Illness% 
set $Wounds=%Wounds% 
set $CHP=%CHP% 
set $MHP=%MHP% 
set $CMP=%CMP% 
set $MMP=%MMP% 
set $DMG=%DMG% 
set $DFN=%DFN% 
set $INT=%INT% 
set $DEX=%DEX% 
set $STR=%STR% 
set $Head=%Head% 
set $Shoulder=%Shoulder% 
set $Neck=%Neck% 
set $Chest=%Chest% 
set $Glove=%Glove% 
set $Leg=%Leg% 
set $Feet=%Feet% 
set $LTWP=%LTWP% 
set $RTWP=%RTWP% 
set $>%Name%_Savefile.txt 
cls 
echo SAVED 
echo. 
echo. 
pause 
Goto Start 

和負載腳本

::Select Character to Load 
:LoadError 
Echo INVALID NAME 
echo. 
echo. 
echo. 
echo. 
goto LoadSelect1 
:LoadSelect 
cls 
goto LoadSelect1 
:LoadSelect1 
set /p Name=Enter character to load: 
goto Load 
:Load 
cls 
if EXIST %Name%_Savefile.txt goto LoadSuccess 
goto LoadError 
:Load 
for /f "delims=" %%a in %Name%_Savefile.txt do set %%a 
goto Stats 

我缺少的東西?我希望所有以$開頭的變量都可以被定位,而不需要列出每個變量。

紅利問題: 如果我使用$ Variable作爲原始變量,他們仍然使用%Variable%?調用嗎?如果是這樣,它會減少相當多的混亂。

- 我認識到batch是一種次優語言,但它是我唯一熟悉的語言。我目前正在研究lua和C++,並計劃通過稍後轉換批處理文件來練習兩者。

編輯:該文件被創建,但只包含$在第1行,沒有別的。我假設我誤解了變量export命令的使用。

+0

http://stackoverflow.com/questions/23011289/retrieving-variables-from-txt-error-batch提供了一個簡單的解決方案 – Kreinas

回答

0

這很簡單,如果你有%test%作爲你的變量。 (但它可以是任何%%的事情),那麼你應該這樣做:

echo %test% 
echo %test% >nameofyourtextfile.txt 

然後讀取你應該使用:

for /f "delims=" %%x in (nameofyourtextfile.txt) do set "test=%%x" 
echo %test% 

作品爲文本文件的第一行和>>將變量發送到最後一行。所以,你可以用這些像這樣:

echo %test1% > nameofyourtextfile.txt 
echo %test2% >> nameofyourtextfile.txt 
echo %test3% >> nameofyourtextfile.txt 

從不同的線路加載你可以使用:

for /F "tokens=1,2,3" %%i in (nameofyourtextfile.txt) do call :process %%i %%j %%k 
goto thenextstep 
:process 
set test1=%1 
set test2=%2 
set test3=%3 

你可以添加更多的標記,像這樣:

for /F "tokens=1,2,3,4,5" %%i in (nameofyourtextfile.txt) do call :process %%i %%j %%k 
goto thenextstep 
:process 
set test1=%1 
set test2=%2 
set test3=%3 
set test4=%4 
set test5=%5 
+0

謝謝斯蒂芬。單獨的這將工作,但需要將> nameofyourtextfile.txt附加到每個。雖然這不會花太長時間,但我的印象是有一種方法可以導出所有帶前綴相同前綴的變量。這確實有可能嗎?如果不是,這個答案是完全可以接受的。 – Kreinas

+0

所以你想要它發送到同一個文本文件。 – 09stephenb

+0

是的。使用一個命令,整組變量將被導出爲.txt,並且可以在稍後再次加載。 示例: '的用戶輸入命令「保存」'' 執行命令Save' '變量導出到.txt' '的用戶輸入命令「裝載」'' 的變量被稱爲並且在.txt' – Kreinas

0

如果您按照你發佈的方式,你擁有什麼(只是一個摘錄)

在喲烏爾主代碼set Wounds=None

你節省代碼 set $Wounds=%Wounds% set $>filename

在被翻譯成 set $Wounds=None

在結束你的加載代碼for %%a .... set %%a

,你有沒有分配負載值%Wounds%,這樣的aditional的set Wounds=%$Wounds%是必要的。

我想利用你收到$的建議是使用共同的前綴對所有要保存變量上的意見,所以,你可以把他們從不費吹灰之力文件加載它們。只要它是一個有效的sintax,並且您將所有想要保存/加載的變量更改爲該sintax,您就可以使用$或任何其他您想要的內容。

例如

call :initializeCharacter 
    .... 

    call :save 

    .... 

    call :load 

:initializeCharacter 
    set "ch.Name=Und" 
    set "ch.Gender=Und" 
    .... 
    exit /b 

:save 
    set ch.>"c:\savedGames\save.txt" 
    exit /b 

:load 
    for /f "usebackq delims=" %%a in ("c:\savedGames\save.txt") do set "%%a" 
    exit /b 

當負載函數被調用時,變量(名爲ch.whatever並保存爲ch.whatever)獲取文件讀取覆蓋。這樣,代碼中的變量,保存的內容和加載的內容都具有相同的名稱。無需set $myVar=%myVar%上載

保存或set myVar=%$myVar%和使用您所有需要保存/加載的模塊變量喜歡$ch.,......或任何前綴。您不想保存/加載的名稱應該與set prefix>file中使用的前綴不匹配。更好的選擇是對不同的域/級別/概念元素使用不同的前綴/ ...

+0

這更接近我所需要的,謝謝。然而,我遇到的問題是'set $>「文件''正在將$導出到文件中,而不是所有以$ – Kreinas

+0

爲前綴的變量在設置了所有以$爲前綴的原始變量後,它們不再被調用由%var%在腳本的其餘部分。此外,當試圖導出爲保存時,我仍然收到一個帶有$的文本文件,而沒有其他內容。感謝您的回覆,但現在我將使用效率較低的方法。 – Kreinas