批处理脚本,以便搜索文件中的单词并替换它们

时间:2017-07-10 14:36:35

标签: batch-file

我目前正在尝试编写一个脚本,以便在文件中找到一个句子,并用另一个句子替换该行。 我已经做到了:

@echo off 
setlocal enableextensions disabledelayedexpansion

set "search=@Interceptors({ RuntimeExceptionInterceptor.class })"
set "replace=@Interceptors({ RuntimeExceptionInterceptor.class, ReportInterceptor.class })"

set "textFile=test2.txt"

for /f %%i %%f in ('type "%textFile%" ^& break ^> "%textFile%" ') do (
    set "line=%%i %%f"
    setlocal enabledelayedexpansion
    >>"%textFile%" echo(!line:%search%=%replace%!
    endlocal
)

但是它不起作用,这个脚本无法用我想要的那个替换我的第一行,你能帮我吗?)?

3 个答案:

答案 0 :(得分:1)

为什么不将sed命令与-i标志一起使用?这听起来像是为这个工具制作的

答案 1 :(得分:0)

使用不同的方法而不是批处理文件更容易解决问题。据推测,您正在使用Java IDE进行开发。使用其全球替换设施;例如在IntelliJ IDEA中,使用选项"替换路径..."。

答案 2 :(得分:0)

您的代码中存在一些错误:

  • for只有一个表达变量,通过"tokens=",您可以在使用"delims="列出的字符中拆分输入时定义更多内容。请参阅help for
  • 在阅读时你不能写相同的内容。
  • 搜索和替换字符串中的右括号会导致for循环中断 - 您需要使用^转义它们。
@echo off
setlocal enableextensions Disabledelayedexpansion

:: take care the closing parenthesis has to be escaped with a caret 
set "search=@Interceptors({ RuntimeExceptionInterceptor.class }^)"
set "replace=@Interceptors({ RuntimeExceptionInterceptor.class, ReportInterceptor.class }^)"

set "textFile=test2.txt"
set "text_new=test2.new"

( for /f "Delims=" %%i in (
    'type "%textFile%"  '
  ) do (
    set "line=%%i"
    Call echo:%%line:%search%=%replace%%%
  )
)  > "%text_new%"
type "%text_new%"

为您保留更换旧文件。