【发布时间】:2020-06-07 14:03:12
【问题描述】:
这可能已经在互联网上得到解答,但我找不到解决方案。
我有一个包含大量文本的 .ini 文件,这里是一个示例:
[General]
FullScreen = True
InternalResolution = 0
我需要设置一个批处理文件来搜索此行 InternalResolution 并将值更改为不同的数字,例如 5。 输出应如下所示:
[General]
FullScreen = True
InternalResolution = 5
我有两个问题,第一个是值 = 0 有时可能是 = 1 或 = 2,而且文件中必须存在所有空格(应用程序依赖于这个 ini 文件,所以我可以'不要删除空格。 我试过这个:
@echo off
setlocal disableDelayedExpansion
:Variables
set InputFile=myfile.ini
set OutputFile=myfiletemp.ini
set "_strFind=InternalResolution = 0"
set "_strInsert=InternalResolution = 5"
:Replace
>"%OutputFile%" (
for /f "usebackq delims=" %%A in ("%InputFile%") do (
if "%%A" equ "%_strFind%" (echo %_strInsert%) else (echo %%A)
)
)
DEL %InputFile%
MOVE %OutputFile% %InputFile%
ENDLOCAL
仅当 InternalResolution 值为 0 时才有效。如果该值与 0 不同,我不知道如何替换该行。应该有一种方法可以搜索该行是否包含文本 InternalResolution = X 并替换整行或值。
谢谢。
【问题讨论】:
-
似乎没有内部命令可以更改本机cmd中的文件,您只能将数据附加到它或重写它(除非您在谈论psh)
-
根据您告诉我们的内容,尝试确定每个可能的值似乎有点不必要。为什么不直接使用
find.exe,看看InternalResolution = 5是否与myfile.ini匹配,如果不是,只需添加/替换即可。 -
将
/Y开关添加到move命令行时,您可能会跳过del命令...
标签: windows batch-file text replace find