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


当前回答

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

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

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

其他回答

Power shell命令的工作就像一个魅力

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

dostips.com上的BatchSubstitute.bat是一个使用纯批处理文件进行搜索和替换的示例。

它使用FOR、FIND和CALL SET的组合。

包含“&<>]|^”字符的行可能会被错误处理。


这里的很多答案都帮我指明了正确的方向,但是没有一个适合我,所以我把我的解决方案贴出来。

我用的是内置PowerShell的Windows 7。下面是我用来查找/替换文件中所有文本实例的脚本:

powershell -Command "(gc myFile.txt) -replace 'foo', 'bar' | Out-File -encoding ASCII myFile.txt"

解释一下:

powershell会启动Windows 7中包含的powershell.exe - command”…是powershell.exe的命令行参数,其中包含要运行的命令 (gc myFile.txt)读取myFile.txt的内容(gc是Get-Content命令的缩写) -replace 'foo', 'bar'简单地运行replace命令将foo替换为bar | Out-File myFile.txt输出到文件myFile.txt -encoding ASCII防止将输出文件转录为unicode,正如注释所指出的那样

Powershell.exe应该已经是PATH语句的一部分,但如果不是,可以添加它。它在我机器上的位置是C:\WINDOWS\system32\WindowsPowerShell\v1.0

显然,现代的windows系统都内置了PowerShell,允许你直接使用

(Get-Content myFile.txt) -replace 'foo', 'bar' | Out-File -encoding ASCII myFile.txt

我是Aba搜索和替换的作者,你可以从Windows命令行使用。它可以在没有任何用户交互的情况下进行批量替换,也可以替换多个文件中的文本,而不仅仅是一个文件。

欢迎您试用我的工具;我很乐意回答任何问题。

在Windows 7+的。bat中使用powershell

编码utf8是可选的,适合网站

@echo off
set ffile='myfile.txt'
set fold='FOO'
set fnew='BAR'
powershell -Command "(gc %ffile%) -replace %fold%, %fnew% | Out-File %ffile% -encoding utf8"