batch-file - 用批处理文件替换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 运行时错误打开输入文件:找不到文件
解决方案
由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=
和 四个数字开头的行,数字之间有一个点,并用指定的替换字符串替换这些行。
推荐阅读
- python - 使用点列表列训练模型
- html - 如何将两个h3标签和一个div放在同一行?
- android-studio - Android工作室中的致命异常空对象引用
- java - 如何使用 HttpURLConnection 进行原始发布
- c# - 是否可以借助 C# 中的文本框名称将文本写入文本框?
- javascript - 单击类别按钮时如何过滤产品
- java - 如何使用 Java 要求日期和时间?
- flutter - 如何更改 TextButton 颤动的字体大小
- azure-devops - 从另一个变量组更新 Azure DevOps 变量组的多个值
- c++ - 在 C++ 中,函数声明是否在函数参数的传递方式中发挥作用 - 通过引用或通过值