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


当前回答

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

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

其他回答

刚刚遇到了一个类似的问题-“搜索和替换文件中的文本”,但除了文件名和搜索/替换我都需要使用正则表达式。因为我不熟悉Powershell,想要保存我的搜索以供以后使用,所以我需要一些更“用户友好”的东西(如果它有GUI的话更可取)。

所以,在谷歌搜索:)时,我发现了一个很棒的工具——FAR(查找和替换)(不是屁)。

这个小程序有很好的GUI和支持正则表达式在文件名和文件内搜索。唯一的缺点是,如果你想保存你的设置,你必须以管理员身份运行程序(至少在Win7上)。

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

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

在Windows上使用Git时,只需启动Git -bash即可 使用sed。或者,当使用Windows 10时,启动“Bash on Ubuntu on Windows”(来自Linux子系统)并使用sed。

它是一个流编辑器,但是可以直接使用以下命令编辑文件:

sed -i -e 's/foo/bar/g' filename

-i选项用于编辑文件名上的位置。 -e option表示要执行的命令。 S用于将找到的表达式“foo”替换为“bar”,g用于替换任何找到的匹配项。


ereOn注:

如果你只想替换Git存储库版本文件中的字符串,你可能想使用:

git ls-files < eventual subfolders & filters > | xargs sed - e, s / foo /酒吧/ g’

这产生了奇迹。

我更喜欢使用来自GNU实用程序的sed用于Win32,以下需要注意

单引号“在窗口中不起作用”,请使用“”代替 Sed -i不能在windows中工作,它需要文件交换

因此,sed在windows中查找和替换文件中的文本的工作代码如下所示

sed -e "s/foo/bar/g" test.txt > tmp.txt && mv tmp.txt test.txt

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

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

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