使用批处理更改文本文件中一行的字符串

时间:2018-11-08 12:20:08

标签: string batch-file replace

我有文本文件(保存为* .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

我想使用* .bat文件将 Example_PAth 更改为 Example_PAth_New

为此,我有以下代码:

@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 :(得分:1)

我根据12个小时前给出的建议修改了原始代码,并对其进行了测试以证明它可以正常工作(在10个小时前OP在 Update 中说还没有解决方案。

@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%!
   )
)

输出文件:

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