Как найти строку и заменить ее с помощью пакетных команд? - PullRequest
0 голосов
/ 04 октября 2011

У меня есть текстовый файл с множеством параметров с уникальными именами.Мне нужно найти параметр по его имени и изменить значение параметра.Файл выглядит примерно так:

   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 ]

2 голосов
/ 04 октября 2011

в случае, если это 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
      )
    )
    

, и вы почти закончили, или, по крайней мере, на пути к решению.См. HELP FOR и HELP IF для получения дополнительной информации.

1 голос
/ 04 октября 2011

Это немного загадочно для начинающих. И есть много лучших языков для этой работы.
Но это можно сделать и с помощью партии.

Ключ - переписать файл и изменить правильную строку.

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

Предполагается, что в тексте нет восклицательных знаков и строки всегда отформатированы на три части, разделенные пробелами или табуляцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...