如何使用批处理文件自动查找和更改.sav文件中的几行文本(以.txt格式打开)?

时间:2015-02-27 20:14:55

标签: windows batch-file

有这个游戏,如果你找到并修改了保存文件,你可以改变你的起始武器。因为它是permadeath并且起始武器是硬编码的,所以保持更改的唯一方法是打开保存文件,每次关闭游戏时,更改保存文件中的相应行,保存,然后打开比赛又来了。这显然需要时间,超过每次游戏之间可容忍的时间。所以我制作了一个批处理文件,用一个具有相同数据的副本覆盖了保存文件,除了表明你的起始武器是什么的文本行,所以当我去世时我必须做的就是关闭游戏并打开批处理:

XCOPY /y C:\modifiedsave C:\originalsave START /d "C:\Games\Nuclear Throne\Nuclear Throne Update 63" nuclearthrone.exe

这里的问题是它覆盖了保存文件中的所有内容,这使得我所取得的任何进展(成就,统计数据,敌人等等)都丢失了。解决这个问题的唯一方法是更改​​保存文件中的单个文本段,而不是覆盖它,但因为我对这整个事情都很陌生(noobish)我不知道该怎么做。这是我想要更改的保存文件中的部分(粗体):

DATA

1

1

0

7

1

1

0

7

1

1

0

7

1

1

0

7

1

1

0

7

39

1

0

7

1

1

0

7

1

1

0

7

46

1

0

7

1

1

0

7

1

1

0

7

81

1

0

7

56

1

1

0

0

0

0

0

0

-1

(粗体数字是起始武器的数据值。) ~~~ 那么我如何创建一个批处理文件(或任何简单的可执行文件),用我选择的数字替换粗体中的所有数字?

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL

(
FOR /f "tokens=1*delims=:" %%a IN ('findstr /n /r "^" "q28773499.txt"') DO (
 SET "replaced="
 FOR /f "tokens=1*delims=:" %%r IN (q28773499a.txt) DO IF "%%r"=="%%a" SET "replaced=Y"&ECHO(%%s
 IF NOT DEFINED replaced ECHO(%%b
)
)>newfile.txt

FC newfile.txt q28773499.txt

GOTO :EOF

我使用了一个名为q28773499.txt的文件,其中包含我的测试数据。

制作newfile.txt

目前尚不清楚“DATA”行是标题还是实际上是文件的一部分。

您需要创建一个包含以下内容的文件q28773499a.txt

2:61
4:11
19:803

onthislinenumber 列表: putthisvalue

它的工作方式是使用findstr读取您的数据文件(当然,更改名称以适应),以便在冒号之前应用数字;使用delims工具来标记该行,并将数字分配给%%a,将数据分配给%%b

对于每一行,清除replaced标志,尝试使用相同的行号在变更文件q28773499a.txt中找到一行。如果找到,则发送在修改文件中找到的数据并设置replaced标志。

如果在读取replaced文件后尚未设置alterations标志,则在%%b输出原始数据。