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


当前回答

Powershell命令-

获取文件的内容,并将其替换为其他文本,然后存储到另一个文件中

命令1 | ForEach-Object {$_.replace("some_text","replace_text").replace("some_other_text","replace_text")} | Set-Content filename2.xml

将另一个文件复制到原始文件中

Command2

复制-项目-路径filename2.xml -目标文件名.xml -PassThru .xml

删除另一个文件

命令3

Remove-Item filename2.xml

其他回答

刚刚使用的FART(“查找和替换文本”命令行实用程序): 优秀的小免费软件的文本替换在一个大的文件集。

安装文件在SourceForge上。

使用的例子:

fart.exe -p -r -c -- C:\tools\perl-5.8.9\* @@APP_DIR@@ C:\tools

将在这个Perl发行版的文件中预览递归执行的替换。

唯一的问题是:屁的网站图标不是很有品位,精致或优雅;)


2017年更新(7年后)jagb在2011年Mikail Tunç的文章“放屁的简单方法-查找和替换文本”的评论中指出


正如Joe Jobs在评论(2020年12月)中指出的,例如,如果你想替换&A,你需要使用引号,以确保&不会被shell解释:

fart in.txt "&A" "B" 

我知道我迟到了。

就我个人而言,我喜欢以下的解决方案: ——http://www.dostips.com/DtTipsStringManipulation.php Snippets.Replace

我们还广泛使用重复数据删除功能,帮助我们每天通过SMTP发送大约500封电子邮件: ——https://groups.google.com/forum/ # ! / alt.msdos.batch.nt / sj8IUhMOq6o话题

这些都是本地工作,不需要额外的工具或实用程序。

替代者:

DEL New.txt
setLocal EnableDelayedExpansion
For /f "tokens=* delims= " %%a in (OLD.txt) do (
Set str=%%a
set str=!str:FOO=BAR!
echo !str!>>New.txt
)
ENDLOCAL

DEDUPLICATOR(注意使用-9作为ABA编号):

REM DE-DUPLICATE THE Mapping.txt FILE
REM THE DE-DUPLICATED FILE IS STORED AS new.txt

set MapFile=Mapping.txt
set ReplaceFile=New.txt

del %ReplaceFile%
::DelDupeText.bat
rem https://groups.google.com/forum/#!topic/alt.msdos.batch.nt/sj8IUhMOq6o
setLocal EnableDelayedExpansion
for /f "tokens=1,2 delims=," %%a in (%MapFile%) do (
set str=%%a
rem Ref: http://www.dostips.com/DtTipsStringManipulation.php#Snippets.RightString
set str=!str:~-9!
set str2=%%a
set str3=%%a,%%b

find /i ^"!str!^" %MapFile%
find /i ^"!str!^" %ReplaceFile%
if errorlevel 1 echo !str3!>>%ReplaceFile%
)
ENDLOCAL

谢谢!

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

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

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

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

这是批处理脚本做得不好的一点。

更多辣椒链接到的脚本可以用于某些文件,但不幸的是,它会阻塞那些包含管道和&号等字符的文件。

VBScript是一个更好的内置工具。请看这篇文章的例子: http://www.microsoft.com/technet/scriptcenter/resources/qanda/feb05/hey0208.mspx