我有一个 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(作为安全预防措施,这不包含在上面的代码中)。