Batch file 批处理脚本,用于查找和替换文本文件中的字符串,而无需创建额外的输出文件来存储修改后的文件

Batch file 批处理脚本,用于查找和替换文本文件中的字符串,而无需创建额外的输出文件来存储修改后的文件,batch-file,replace,Batch File,Replace,我已经编写了一个批处理脚本来查找和替换文本文件中的字符串。下面是我的脚本 @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

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

@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%
我能够成功地替换这个单词

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

请帮助我编辑文本文件而不将输出重定向到新文件。

@echo off
setlocal enableextensions disabledelayedexpansion
设置“搜索=%1”
设置“替换=%2”
设置“textFile=Input.txt”
对于/f“delims=“%%i in('类型“%textFile%”^&break^>“%textFile%”)执行以下操作(
设置“行=%%i”
延迟扩展
>>“%textFile%”回显(!行:%search%=%replace%!
端部
)

for/f
将在开始处理之前读取所有数据(由
类型
comamnd生成)。在开始执行
类型
的子流程中,我们包括一个重写文件的重定向(因此它是空的)。一旦
do
子句开始执行(要处理的文件内容在内存中)输出附加到文件。

我们能否在编辑模式下打开文件并在阅读时修改它?我对此没有任何想法。如果可能,请告诉我。您也可以使用(查找和替换文本)执行此任务的命令行实用程序。^&break^>是什么意思?@ananthjoshi,它删除文件内容。它只不过是
break>文件
,只是一个没有重定向到文件的输出的命令。文件内容被删除。
&
之前的插入符号将在
for/f中转义
命令。这几乎对我有效,但它从我要替换的文本文件中删除了
。我还没有找到解决方法。@Dov,删除
设置“line=!line:%search%=%replace%!”
并将下一行更改为
>“%textFile%”echo(!line:%search%=%replace%!
@Rayhunter,如果执行替换后没有任何数据要输出,则可避免
回声关闭
输出。