首页 > 解决方案 > 用批处理文件替换ini文件内容

问题描述

我正在尝试使用批处理文件在给定目录的 .ini 文件中查找 IP 地址,并将其更改为新地址。我起诉这个问题作为来源。

脚本运行没有错误,但是它创建的替换文件是空的,也是一个 .bat 文件,而不是 .ini。

脚本:

set "file=M:\Haem\C.Mooney\cmooney\apex\Scripts\testIPCOnfig.ini"

:loop
findstr "^ipaddress=193.120.187.44$" "%file%" >nul || (
type "%file%" | repl "^ipaddress=193.120.187.44=.*" "ipaddress=193.120.187.110" >"%file%.tmp"
move "%file%.tmp" "%file%" >nul
)
ping -n 120 localhost >nul
goto :loop

rpl 命令取自帮助文件,在此处获取。

testIPCONfig.ini 文件的内容:

ip地址=193.129.187.44

感谢任何反馈。

使用更新的 JREPL 助手更新脚本:

rem Check if the helper file is in same directory, if not exit


if not exist "%~dp0JREPL.bat" goto :EOF
rem if not exist "M:\Haem\C.Mooney\cmooney\apex\Scripts\IPChange\testIPCOnfig.txt" goto :EOF


rem call te helper JREPL>BAT to search for ipaddress and change it 

call "%~dp0JREPL.bat" "^ipaddress=\d+\.\d+\.\d+\.\d+" "ipaddress=193.120.187.110" /F "M:\Haem\C.Mooney\cmooney\apex\Scripts\IPChange\testIPCOnfig.txt" /O -

testIPCONfig.txt 的内容:

ip地址=193.120.187.44

返回以下错误:

JScript 运行时错误打开输入文件:找不到文件

标签: batch-filereplace

解决方案


Dave Benham编写的REPL.BAT已弃用,并被同样由Dave Benham编写的JREPL.BAT取代,JREPL.BAT是一个批处理文件/JScript 混合体,用于使用 JScript 对文件运行正则表达式替换。

@echo off
if not exist "%~dp0jrepl.bat" goto :EOF
if not exist "M:\Haem\C.Mooney\cmooney\apex\Scripts\testIPCOnfig.ini" goto :EOF

call "%~dp0jrepl.bat" "^ipaddress=\d+\.\d+\.\d+\.\d+" "ipaddress=193.120.187.110" /F "M:\Haem\C.Mooney\cmooney\apex\Scripts\testIPCOnfig.ini" /O -

批处理文件JREPL.BAT必须与上面代码的批处理文件存储在同一目录中。出于这个原因,批处理文件首先检查JREPL.BAT是否真的存在于批处理文件的目录中,如果此条件不成立则退出。

然后批处理文件检查 INI 文件是否存在以进行修改,如果该文件根本不存在则退出。请参阅GOTO :EOF 返回到哪里?

然后调用 JREPL.BAT以搜索以ipaddress=和 四个数字开头的行,数字之间有一个点,并用指定的替换字符串替换这些行。


推荐阅读