【问题标题】:Feed in a list of find and replace values with batch用批处理输入查找和替换值的列表
【发布时间】:2015-01-14 11:08:15
【问题描述】:

我正在寻找一种使用 Windows 批处理脚本在文本文件中查找和替换多个单词的方法。

我知道可以用这个 bat 脚本替换一个单词:

@echo off &setlocal
set "search=%1"
set "replace=%2"
set "textfile=Input.txt"
set "newfile=Output.txt"
(for /f "delims=" %%i in (%textfile%) do (
    set "line=%%i"
    setlocal enabledelayedexpansion
    set "line=!line:%search%=%replace%!"
    echo(!line!
    endlocal
))>"%newfile%"
del %textfile%
rename %newfile%  %textfile%

现在,我只需要更进一步,输入搜索并替换另一个文件中类似于这种格式的字符串:

search_string1, replace_string1
search_string2, replace_string2
search_string3, replace_string3
.
.
.

我认为我会以某种方式逐行处理文件,并将它们解析为两个变量(搜索、替换),然后将其输入到上面的脚本中。有什么想法吗?我是 Windows 批处理脚本的新手,以前从未真正做过,所以请注意我的新手问题。

【问题讨论】:

    标签: windows batch-file replace find


    【解决方案1】:

    这种类型的文本替换在通过批处理文件执行时速度很慢并且容易失败。我编写了 FindRepl.bat 程序,它是一个 Batch-JScript 混合脚本,它不仅运行速度更快且没有错误,而且还允许在数据文件的一次处理过程中执行您正在寻找的多个替换。 JScript 是一种编程语言,它包含在从 XP 开始的所有 Windows 版本中。使用 FindRepl.bat 程序,您可以通过以下方式解决您的问题:

    @echo off
    setlocal EnableDelayedExpansion
    set "search="
    set "replace="
    for /F "tokens=1,2 delims=," %%a in (replacements.txt) do (
       set "search=!search!|%%a"
       set "replace=!replace!|%%b"
    )
    set "search=!search:~1!"
    set "replace=!replace:~1!"
    < Input.txt FindRepl =search /A =replace > Output.txt
    

    请注意,替换文件中逗号后面的所有文本都是替换字符串,包括空格。

    您可以从this site 下载 FindRepl.bat 程序。将它放在之前程序的同一个文件夹中,或者更好的是,放在 %PATH% 中包含的文件夹中,这样您就可以直接使用它了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 2012-06-17
      • 2016-01-18
      • 2013-09-08
      • 2012-10-14
      • 2021-10-14
      相关资源
      最近更新 更多