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

How do I find and change a couple of lines of text within a .sav file (it opens with .txt format) automatically using a batch file?

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

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

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

数据

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

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

@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 标志。

如果读取alterations文件后replaced标志位没有设置,则输出%%b.

中的原始数据