3

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

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

set /p file= < file.txt

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

4

4 回答 4

4

很难给出明确的答案,因为不清楚您所说的非常简单的搜索和替换是什么意思,但这里有所有需要的元素:

读取文件

您可以使用以下命令逐行读取文件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.txtecho语句之后添加一样简单。

过滤文件的行

如果您只是想从文件中删除一些行,您也可以考虑使用findstr命令 ( help findstr)。

于 2012-05-24T20:19:45.387 回答
3

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

 Echo off
    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%
于 2018-02-06T16:28:30.453 回答
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

于 2016-02-21T09:34:58.453 回答
1

要添加到Johan A 的答案,如果您希望从用户输入中提供查找/替换字符串而不是硬编码,您可以这样编写。

(我还添加了一个finalfilename变量,因为我想保持原始文件不变,只生成一个带有输出的新文件。如果您希望它覆盖原始文件,只需将其设置为与源文件名相同)

@ECHO OFF
set "sourcefile=sourcefilename.txt"
set "tempfile=filenametemp.txt"
set "finalfilename=outputfile.txt"

ECHO Enter search term to find:
set /p search1=

ECHO Enter replacement string:
set /p replace1=

ECHO Finding  %search1%  and replacing with  %replace1%

(for /f "delims=" %%i in (%sourcefile%) do (
    set "line=%%i"
    setlocal enabledelayedexpansion
    set "line=!line:%search1%=%replace1%!"
    echo(!line!
    endlocal
))>"%tempfile%"

:: Delete potential existing final file to avoid duplicate error when renaming
del %finalfilename%
ECHO Setting filename to  %finalfilename%
rename %tempfile%  %finalfilename%

ECHO Done
:: Pause to see messages
PAUSE
于 2022-01-17T20:08:33.813 回答