如何使用批处理文件自动查找和更改 .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
.
中的原始数据
有这个游戏,如果你找到并修改存档文件,你就可以改变你的起始武器。由于它是 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
.