使用Windows批处理编程在文件中搜索和替换

时间:2012-05-24 17:46:24

标签: batch-file

我有一个批处理文件,我想打开一个文件并执行一个非常简单的搜索和替换该文件,然后保存(覆盖)它执行搜索和替换的文件。

我知道如何阅读文件的第一行:

set /p file= < file.txt

但是在阅读整个文件并对其进行搜索/替换的批处理方法上苦苦挣扎。

3 个答案:

答案 0 :(得分:3)

很难给出确定的答案,因为非常简单的搜索和替换并不清楚你的意思,但这里有所有需要的元素:

阅读文件

您可以使用for /f

逐行读取文件
for /f %%a in (myfile.txt) do (
    echo %%a
)

替换文字

这是我知道如何替换文本出现的一种方式:

SETLOCAL ENABLEDELAYEDEXPANSION
for /f "delims=" %%a in (myfile.txt) do (
    SET s=%%a
    SET s=!s:stringtoreplace=replacementstring!
    echo !s!
)

这将输出myfile.txt的所有行,并将 stringtoreplace 替换为 replacementstring

覆盖文件

您可以考虑先写入新的临时文件,然后用新的临时文件替换原始文件。

通过上面的示例,就像在>>yourtempfilename.txt语句后添加echo一样简单。

过滤文件的行

如果您只想删除文件中的某些行,您还可以考虑使用findstr命令(help findstr)。

答案 1 :(得分:1)

您可以使用VBScript(可以通过批处理脚本执行)在文件中或使用硬编码字符串或正则表达式进行搜索和替换。

以下是使用硬编码搜索条件进行搜索和替换的示例:

<job>
<script language="JavaScript">
    var fso = new ActiveXObject("Scripting.FileSystemObject");  
    var MyFile = fso.GetFile("c:\\file.json");
    var txt = MyFile.OpenAsTextStream(1).ReadAll();
    txt = txt.replace("criteria", "replacing value");
    WScript.echo("Replaced File"+txt);
    var out = MyFile.OpenAsTextStream(2);
    out.write(txt);
</script>

将此脚本保存在名为replace.wsf的文件中。然后,您可以从这样的批处理文件(在Windows操作系统中)执行脚本:

pushd %~dp0
cscript c:\replace.wsf

如果您需要根据正则表达式进行搜索和替换,那么我建议您查看此示例:regex search replace in batch

答案 2 :(得分:0)

我用过这个脚本。 将filename.txt和search1 / replace1替换为您的文件名和正确的搜索/替换字符串或文本。

set "textfile=filename.txt"
set "tempfile=filenametemp.txt
(for /f "delims=" %%i in (%textfile%) do (
    set "line=%%i"
    setlocal enabledelayedexpansion
    set "line=!line:search1=replace1!"
    echo(!line!
    endlocal
))>"%tempfile%"
del %textfile%
rename %tempfile%  %textfile%