如何使用Windows .cmd替换文件中的变量文本?

时间:2017-05-29 13:46:50

标签: windows batch-file cmd

我有.ini文件,并且有一行

HOST='pc-name'

片段。但它可能是别的而不是pc-name。 HOST ='随机'或者HOST =' welcome'例如。我需要找到它并替换为HOST ='%COMPUTERNAME%'其中%COMPUTERNAME%是运行此.cmd文件的实际计算机名称。我只发现了如何替换静态内容,所以问题是用随机值检测这个片段。并且=被解释为赋值操作,但我需要它作为简单的文本符号。

P.S。我需要使用.cmd文件。

3 个答案:

答案 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

此外:

  • 如果您的窗口是32位,请使用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
    )
)