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


当前回答

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

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

其他回答

我不认为有任何内置命令可以做到这一点。我建议你下载Gnuwin32或UnxUtils,并使用sed命令(或只下载sed):

sed -c s/FOO/BAR/g filename

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

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

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

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

用replace .bat

1)用e?选项,将计算特殊字符序列,如\n\r和unicode序列。在这种情况下,将替换引用的“Foo”和“Bar”:

call replacer.bat "e?C:\content.txt" "\u0022Foo\u0022" "\u0022Bar\u0022"

2)直接替换没有引用的Foo和Bar。

call replacer.bat "C:\content.txt" "Foo" "Bar"

对我来说,为了确保不改变编码(从UTF-8),保持重音…唯一的方法是在之前和之后提到默认编码:

powershell -Command "(gc 'My file.sql' -encoding "Default") -replace 'String 1', 'String 2' | Out-File -encoding "Default" 'My file.sql'"

在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’

这产生了奇迹。