2014-04-11 66 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