批处理脚本查找和替换文本文件中的字符串,不用于存储修改后的文件创建一个额外的输出文件

ana*_*shi 20 replace batch-file

我已经写一个批处理脚本来查找和替换文本文件中的字符串.以下是我的脚本.

@echo off &setlocal
set "search=%1"
set "replace=%2"
set "textfile=Input.txt"
set "newfile=Output.txt"
(for /f "delims=" %%i in (%textfile%) do (
    set "line=%%i"
    setlocal enabledelayedexpansion
    set "line=!line:%search%=%replace%!"
    echo(!line!
    endlocal
))>"%newfile%"
del %textfile%
rename %newfile%  %textfile%
Run Code Online (Sandbox Code Playgroud)

我能够成功替代词.

但我不想创建Output.txt的,然后将其重命名原始文件..

请帮我出去编辑一个文本文件,而不输出重定向到一个新的文件..

MC *_* ND 35

@echo off 
    setlocal enableextensions disabledelayedexpansion

    set "search=%1"
    set "replace=%2"

    set "textFile=Input.txt"

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

for /ftype在开始处理之前读取所有数据(由comamnd 生成).在开始执行的子进程中type,我们包括重定向覆盖文件(因此它被清空).一旦do子句开始执行(文件的内容在内存中进行处理),输出就会附加到文件中.

  • @Dov,去掉'set "行=行:!%搜索%=%替换%"`并改变下一行成`>> "%TEXTFILE%" 回声(行:%搜索%=%代替%! `. (4认同)
  • ^& 中断 ^> 是什么意思? (3认同)
  • @ananthjoshi,它会删除文件内容。它只不过是 `break > file`,只是一个没有输出重定向到文件的命令。文件内容被删除。`&` 和 `>` 之前的插入符号将在 `for /f` 命令中对它们进行转义。 (2认同)
  • 这几乎对我有用,但它从我要替换文本的文件中删除了“!”。我还没有找到解决方法。 (2认同)
  • @Rayhunter,如果在执行替换后没有任何数据要输出,则可以避免输出“ echo off”。 (2认同)