如何仅更改foriegn批处理文件中的一个特定行,而不影响任何其他行?

时间:2017-03-16 01:47:51

标签: batch-file

我最近一直在玩批处理脚本,我想知道是否有一种方法只能编辑一行单独的批处理文件。我最近一直致力于一个程序,允许我在多个批处理文件之间查看,编辑和交换数据,以便与我和我的朋友一起玩游戏。我在下面提到的是我想出的,但我意识到,当我选择时,让我们说5,作为我的行号,它会保持dirid01.bat中的1-4行(我是想要),第5行将改为我想要的,下面的行将全部删除,所以我只有1-5个操作,其中6-infinity现在不存在。

title Directory Edit
echo.
echo To edit, enter the number of the desired line, then enter it's new value.
echo.
call dirid01.bat
echo.
echo 1  %n% (ID: 01)
echo 2  !     Leader: %leader%
echo 3  !     !     Gamertag: %lgt%
echo 4  !     !     Networth: %lnw%
echo 5  !     Population: %pop%
echo 6  !     !     Real: %rpop%
echo 7  !     !     NPC: %npcpop%
echo 8  !     !     Wolven: %wolfpop%
echo 9 !     Bank Balance: %bankbal%
echo 10 !     !     Treasurer: %btr%
echo 11 !     !     !     Gamertag: %btrgt%
echo 12 !     !     !     Networth: %btrnw%
echo 13 !     !     Location: %bankloc%
echo 14 !     Allies:
echo 15 !     Enemies:
echo.
set /p num=" >  "
if %num%==exit goto start
if %num%==escape goto start
if %num%==esc goto start
set /p edit=" New value for %num%:  "
if %num%==1 echo set n=%edit% > dirid01.bat
if %num%==2 echo set leader=%edit% >> dirid01.bat
if %num%==3 echo set lgt=%edit% >>> dirid01.bat
if %num%==4 echo set lnw=%edit% >>>> dirid01.bat
if %num%==5 echo set pop=%edit% >>>>> dirid01.bat
if %num%==6 echo set rpop=%edit% >>>>>> dirid01.bat
if %num%==7 echo set npcpop=%edit% >>>>>>> dirid01.bat
if %num%==8 echo set wolfpop=%edit% >>>>>>>> dirid01.bat
if %num%==9 echo set bankbal=%edit% >>>>>>>>> dirid01.bat
if %num%==10 echo set btr=%edit% >>>>>>>>>> dirid01.bat
if %num%==11 echo set btrgt=%edit% >>>>>>>>>>> dirid01.bat
if %num%==12 echo set btrnw=%edit% >>>>>>>>>>>> dirid01.bat
if %num%==13 echo set bankloc=%edit% >>>>>>>>>>>>> dirid01.bat
if %num%==14 echo set n=%edit% >>>>>>>>>>>>>> dirid01.bat
if %num%==15 echo set n=%edit% >>>>>>>>>>>>>>> dirid01.bat

因此,在运行此脚本之前,我的sirid01.bat文件将是:

set n=Artijiet-Union
set leader=Aidan
set lgt=(gamertag)
set lnw=20money
set pop=4000
set rpop=6
set npcpop=3994
set wolfpop=0
set bankbal=1000k

等等。 运行脚本后,将第3行更改为Troller27:

set n=Artijiet-Union
set leader=Aidan
set lgt=Troller27

因此所有其他信息都被删除了。我错了什么?

P.S。感谢您花时间阅读所有这些内容:)

1 个答案:

答案 0 :(得分:0)

不确定所有这些重定向器会做什么。

>表示"创建新文件或替换任何现有文件"
>>表示"附加到任何现有文件或创建新文件(如果它不存在)

在你的情况下,#14和#15毫无意义,

(
if %num%==1 echo set n=%edit%
if %num%==2 echo set leader=%edit%
if %num%==3 echo set lgt=%edit%
...
)>> dirid01.bat

会在文件中添加一个新行 - 代码块中的任何echo(带括号的系列行)将被重定向。

因此,如果您的原始目标批处理文件是

set n=Artijiet-Union
set leader=Aidan
set lgt=(gamertag)
...
然后"改变"第3行将文件设置为

set n=Artijiet-Union
set leader=Aidan
set lgt=(gamertag)
...
set lgt=Troller27

因此call该批处理文件首先将lgt设置为(gamertag),然后设置为Troller27,最后设置值为"返回"

警告 - 使用(echoes)>>filename语法,数据中的任何)都会终止该块,因此无法使用可能包含)的值} - 使用您的原始方案,但>>,而不是>或许多 - >

保存游戏的替代方案

如果您为要保存在游戏中的所有变量名保留#@$_这样的字符,那么

set #>savefile

将以

格式保存文件中的所有#个变量
#1=value of #1
#3=value of #3

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

将恢复所有这些已保存的值。

这样可以轻松添加或删除要保存的值。