我有.ini文件,并且有一行
HOST='pc-name'
片段。但它可能是别的而不是pc-name。 HOST ='随机'或者HOST =' welcome'例如。我需要找到它并替换为HOST ='%COMPUTERNAME%'其中%COMPUTERNAME%是运行此.cmd文件的实际计算机名称。我只发现了如何替换静态内容,所以问题是用随机值检测这个片段。并且=被解释为赋值操作,但我需要它作为简单的文本符号。
P.S。我需要使用.cmd文件。
答案 0 :(得分:1)
搜索/替换文件/管道线/块的工具:1个命令行
在我的开放项目 https://github.com/qualiu/msr msr.exe
目录中使用tools
。
针对您的情况 :(删除-R
以预览替换结果;将-K
添加到备份中)
将所有内容HOST=.*
替换为HOST=%COMPUTERNAME%
:
msr -p my.ini -t "^(HOST)=.*" -o "$1=\%COMPUTERNAME\%" -R
更一般:忽略大小写,空格:
msr -p my.ini -it "^(HOST)\s*=.*" -o "$1=\%COMPUTERNAME\%" -R
msr-Win32.exe
。以多个路径和文件递归替换:
msr -rp directory1,dirN,file1,fileN -f "\.ini$" -it "^(HOST)\s*=.*" -o "$1=\%COMPUTERNAME\%" -R
答案 1 :(得分:0)
您可以使用Notepad ++等工具打开.ini文件。
然后,您可以使用正则表达式搜索来查找此类字符串。例如,您可以在Notepad ++中将HOST='.*'
用作搜索模式作为“正则表达式”的搜索表达式。这将搜索模式HOST ='any value',然后您可以将其替换为HOST='%COMPUTERNAME%'
使用CMD,您可以使用
findstr "HOST='.*'" < _place your .ini file name_ >.ini
找到与模式匹配的所有字符串然后替换它们
答案 2 :(得分:0)
如果你可以假设HOME=
将始终在第一列开始,并且它之后的唯一内容可能是用撇号括起来的字符串,你可以做类似的事情。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "usebackq tokens=*" %%s IN (`TYPE "thefile.txt"`) DO (
SET "STR=%%~s"
IF "!STR:~0,6!" EQU "HOME='" (
ECHO HOME='newsetting'
) ELSE (
ECHO %%~s
)
)