我正在使用Windows命令行环境编写一个批处理文件脚本,并希望更改文件中每次出现的一些文本(例如。“FOO”)和另一个(ex。“酒吧”)。最简单的方法是什么?有内置函数吗?


当前回答

可能有点晚了,但我经常在寻找类似的东西,因为我不想经历让软件被批准的痛苦。

但是,您通常以各种形式使用FOR语句。有人创建了一个有用的批处理文件来进行搜索和替换。请看这里。重要的是要理解所提供的批处理文件的局限性。由于这个原因,我没有复制这个答案中的源代码。

其他回答

下载Cygwin(免费)并在Windows命令行中使用类unix命令。

您最好的选择:sed

使用FNR

使用fnr实用程序。它比屁有一些优势:

正则表达式 可选的GUI。有一个“生成命令行按钮”,以创建命令行文本放入批处理文件。 多行模式:GUI允许您轻松地使用多行模式。在《放屁》中,你必须手动转行。 允许您选择文本文件编码。也有一个自动检测选项。

下载FNR: http://findandreplace.io/?z=codeplex

使用的例子: fnr——cl——dir "<目录路径>"——fileMask "hibernate。*"——useRegEx——find "find_str_expression"——replace "replace_string"

看看是否有任何类似于cmd.exe的sed实用程序,它要求在Windows下的sed等效,应该也适用于这个问题。执行概要:

它可以在批处理文件中完成,但它并不漂亮 如果你有足够的时间安装或复制一个exe文件,很多可用的第三方可执行文件都可以帮你完成 可以用VBScript或类似的东西,如果你需要能够运行在Windows盒子没有修改等。

如果你使用的是支持。net 2.0的Windows版本,我会替换掉你的shell。PowerShell从命令行提供了. net的全部功能。还内置了许多命令小程序。下面的例子将解决你的问题。我使用的是命令的全名,还有更短的别名,但这给了你谷歌的一些东西。

(Get-Content test.txt) | ForEach-Object { $_ -replace "foo", "bar" } | Set-Content test2.txt

还可以在https://zoomicon.github.io/tranXform/上看到Replace和ReplaceFilter工具(包括源代码)。第二个是过滤器。

替换文件字符串的工具在VBScript中(需要Windows脚本主机[WSH]才能在旧的Windows版本中运行)

除非你用最新的Delphi(或FreePascal/Lazarus)重新编译,否则过滤器可能无法使用Unicode。