我有一个批处理文件,我想打开一个文件并执行一个非常简单的搜索和替换该文件,然后保存(覆盖)它执行搜索和替换的文件。
我知道如何阅读文件的第一行:
set /p file= < file.txt
但是在阅读整个文件并对其进行搜索/替换的批处理方法上苦苦挣扎。
答案 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%