如何使用批处理命令查找字符串并替换它的一部分?

时间:2011-10-04 15:36:38

标签: batch-file

我的文本文件包含许多具有唯一名称的参数。我需要通过名称查找参数并更改参数的值。该文件看起来像这样

   ID      Value          Name
  4450     2.0        / [var_pot] 'DCF_loc'
  4451     100.0      / [var] 'DCF_t'
  4452     0.1        / [var] 'DCF_dur'
  4458     1000.0     / [var] 'CommtF_t_P1'

例如我需要在文件中找到参数'DCF_t',并将其值从100替换为其他值,例如10.不幸的是,在我的情况下,只有参数的名称和值在我的控制范围内。我需要一个批处理文件来执行“查找和替换”工作。

请帮帮我...提前致谢...

2 个答案:

答案 0 :(得分:2)

如果是Windows,则需要

  1. 循环遍历文件的所有行。尝试像...... FOR /F %%a in (values.txt) DO echo %%a

  2. 跳过第一个标题行。试试FOR /f "skip=1" %%a in (%1) do echo %%a

  3. 解析该行的内容。试试FOR /f "skip=1 tokens=1-5" %%a in (%1) do echo %%b %%d

  4. 检查第四项。尝试

    for /f "skip=1 tokens=1-5" %%a in (%1) do (
      if /i .%%e.==.'DCF_t'. (
        echo %%a  99.9  %%c  %%d  %%e
      ) else (
        echo %%a  %%b  %%c  %%d  %%e
      )
    )
    
  5. 你几乎完成了,或者至少以你的方式解决了这个问题。有关详细信息,请参阅HELP FORHELP IF

答案 1 :(得分:1)

这对批量初学者来说有点神秘。还有很多更好的语言来完成这项工作 但它也可以批量完成。

关键是重写文件并修改正确的行。

set "otherValue=10"
setlocal EnableDelayedExpansion
(
  For /f "tokens=1,2,*" %%a in (myFile.txt) do (
    set "var=%%c"
    if "!var!"=="!var:DCF_t=!" (
      rem ** not found, echo the line
      echo(%%a %%b !var!
    ) ELSE (
      rem ** Found the line
      echo(%%a %otherValue% !var!
    )
  )
) > outfile.txt

这假定文本中没有感叹号,并且行的格式总是分为由空格或制表符分隔的三个部分。