Изменить строку в строке из текстового файла, используя пакет - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть текстовый файл (сохраненный как * .pm, но я предполагаю, что это не имеет никакого значения, поскольку его можно открыть как текстовый файл).Содержимое файла выглядит примерно так:

Header

$VAR1 = {
          'Keywords' => {
                               'X' => '80',
                               'Target_Path' => 'Example_PAth',
                               'Y' => 'File_Path',
                               'X' => '80',
                               'Y' => 'File_Path',
                               'X' => '80',
                               'Y' => 'File_Path',
               sdefkjnhksdf  koijsef ökiljsdf
               sdefkjnhksdf  koijsef ökiljsdf
               sdefkjnhksdf  koijsef ökiljsdf

Я хочу изменить Example_PAth на Example_PAth_New , используя файл * .bat.

Для этого у меня есть следующий код:

@echo off
setlocal disableDelayedExpansion

:Variables
set InputFile=OldFileName.pm
set OutputFile=NewFileName.pm
set "_strFind=Example_PAth"
set "_strInsert=Example_PAth_New"

:Replace
>"%OutputFile%" (
  for /f "usebackq delims=" %%A in ("%InputFile%") do (
    if "%%A" equ "%_strFind%" (echo %_strInsert%) else (echo %%A)
  )

)

Проблема: Полученный файл идентичен исходному.Я предполагаю, что я не читаю строку правильно?Или у кого-нибудь есть идея, как исправить код?

Обновление: Теперь я изменил искомые и замещенные строки, чтобы включить всю строку, как упомянуто @Squashman,Он отлично работает, если искомые строки не содержат символ > .Если я оставлю > , строка будет обнаружена правильно, но она будет заменена пустой строкой.Любое решение?PS: я не могу опустить символ>.

1 Ответ

0 голосов
/ 09 ноября 2018

Я изменил исходный код в соответствии с рекомендацией, которую я дал 12 часов назад, и проверил его, чтобы убедиться, что он работает (после того, как ОП сообщило в Обновлении 10 часов назад, что есть пока не решение).

@echo off
setlocal EnableDelayedExpansion

:Variables
set InputFile=OldFileName.pm
set OutputFile=NewFileName.pm
set "_strFind=Example_PAth"
set "_strInsert=Example_PAth_New"

:Replace
>"%OutputFile%" (
   for /f "usebackq delims=" %%A in ("%InputFile%") do (
      set "line=%%A"
      echo !line:%_strFind%=%_strInsert%!
   )
)

OutputFile:

Header
$VAR1 = {
          'Keywords' => {
                               'X' => '80',
                               'Target_Path' => 'Example_PAth_New',
                               'Y' => 'File_Path',
                               'X' => '80',
                               'Y' => 'File_Path',
                               'X' => '80',
                               'Y' => 'File_Path',
               sdefkjnhksdf  koijsef ökiljsdf
               sdefkjnhksdf  koijsef ökiljsdf
               sdefkjnhksdf  koijsef ökiljsdf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...