批处理更改.txt文件中的特定字符串

批处理更改.txt文件中的特定字符串

我有一个 example.txt ,其中包含:

[DDRAWSINK]
PlaybackDisp=0
Fullscreen=0
CurUsage=2
PlaybackRes=0
ForceRender=0
DV Output On=0
DV Preview VGA=0
DV Port=0

单行只能有 1 个字母数字值,例如

CurUsage 只能有 2、3、0 或 9。不能有 10、-1 或 200

其他元素 (PlaybackDisp、ForceRender、DV Output On 等) 也同样如此。

它们的值只能在 0 到 9 之间。

我想通过批处理文件更改单个值,例如我需要为全屏分配“1”值而不是 0。

批处理必须识别“全屏”并将 0 ---> 更改为 1

有可能吗?谢谢

答案1

有一个非常相似的问题这里,答案可以稍微混合一下以获得你想要的效果:

@ECHO OFF
setlocal enableDelayedExpansion

FOR /F "tokens=1,* delims==" %%i IN (example.txt) DO (
    SET sdone=0
    SET "sname=%%i"
    SET "svalue=%%j"
    ECHO.Name:  !sname!
    ECHO.Value: !svalue!

    :: write out headers
    IF "!sdone!"=="0" IF "!sname:~0,1!"=="[" SET sdone=1&&ECHO.Type:  Header&&ECHO.!sname!>>new.ini

    :: write out the new value if it's "Fullscreen"
    IF "!sdone!"=="0" IF "!sname!"=="Fullscreen" IF "!svalue!"=="0" SET sdone=1&&ECHO.Type:  Rewrite&&ECHO.!sname!=1>>new.ini

    :: write out anything else
    IF "!sdone!"=="0" SET sdone=1&&ECHO.Type:  Content&&ECHO.!sname!=!svalue!>>new.ini

    :: a little padding to read the debug info
    ECHO.
)

它读取输入文件 (example.txt),然后解析标题内容(用“[”表示)并按原样写入。与“全屏”不匹配的标志将按原样以名称=值对的形式写出。如果某一行的名称为全屏,则该值将更改为 1。空行将被跳过。

它将所有更改写入新文件“new.txt”,然后需要将其复制回 example.txt(作为安全预防措施,这不包含在上面的代码中)。

相关内容