用于替换多个文件中特定字符串的批处理脚本

时间:2017-01-09 06:58:54

标签: windows batch-file cmd

我对批处理脚本没有多少经验,我的雇主要求我编写一个批处理脚本,可以运行该脚本来查找和替换目录中所有匹配文件中的一些文本。

我已经尝试过搜索这个并且有一吨资源,我过去常常让我这么做:

@echo off 
    setlocal enableextensions disabledelayedexpansion

    set "search=<employeeloginid>0"
    set "replace=<employeeloginid>"

    set "textFile=TimeTEQ20170103T085714L.XML"

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

这会在{strong>设置文件中找到所有<employeeloginid>0并替换为<employeeloginid> - 在这种情况下为TimeTEQ20170103T085714L.XML

我现在需要对所有 TimeTEQ开头且 .xml

结尾的文件进行调整

我发现this answer显示了如何在目录中执行所有文件,但我不知道如何调整它以满足我的需求。

有人可以帮我吗?

3 个答案:

答案 0 :(得分:2)

简单地环绕标准for loop,如下所示:

@echo off 
setlocal EnableExtensions DisableDelayedExpansion

set "search=<employeeloginid>0"
set "replace=<employeeloginid>"

set "textFile=TimeTEQ*.xml"
set "rootDir=."

for %%j in ("%rootDir%\%textFile%") do (
    for /f "delims=" %%i in ('type "%%~j" ^& break ^> "%%~j"') do (
        set "line=%%i"
        setlocal EnableDelayedExpansion
        set "line=!line:%search%=%replace%!"
        >>"%%~j" echo(!line!
        endlocal
    )
)

endlocal

如果您还要在子文件夹中处理匹配的文件,请使用for /R loop

@echo off 
setlocal EnableExtensions DisableDelayedExpansion

set "search=<employeeloginid>0"
set "replace=<employeeloginid>"

set "textFile=TimeTEQ*.xml"
set "rootDir=."

for /R "%rootDir%" %%j in ("%textFile%") do (
    for /f "delims=" %%i in ('type "%%~j" ^& break ^> "%%~j"') do (
        set "line=%%i"
        setlocal EnableDelayedExpansion
        set "line=!line:%search%=%replace%!"
        >>"%%~j" echo(!line!
        endlocal
    )
)

endlocal

答案 1 :(得分:1)

您可以使用另一个循环来覆盖您当前获得的循环,浏览目录中与您的模式匹配的所有文件,如下所示:

for /f "delims=" %%n in ('dir /b ^| findstr /r "TIMETEQ.*\.xml') do (

并将当前循环的标题更改为:

for /f "delims=" %%i in ('type "%%~n" ^& break ^> "%%~n" ') do (

>>"%textFile%" echo(!line!

>>"%%~n" echo(!line!

总的来说,新脚本应该如下所示:

@echo off 
    setlocal enableextensions disabledelayedexpansion

    set "search=<employeeloginid>0"
    set "replace=<employeeloginid>"

    set "textFile=TimeTEQ20170103T085714L.XML"

    for /f "delims=" %%n in ('dir /a-d /b ^| findstr /r "TIMETEQ.*\.xml') do (

        for /f "delims=" %%i in ('type "%%~n" ^& break ^> "%%~n" ') do (
            set "line=%%i"
            setlocal enabledelayedexpansion
            set "line=!line:%search%=%replace%!"
            >>"%%~n" echo(!line!
            endlocal
        )
    )

说明:

新添加的外部循环遍历命令dir /b ^| findstr /r "TIMETEQ.*\.xml的输出,该命令本身包含dir命令输出的正则表达式搜索结果,/b切换仅显示文件名和/a-d来执行搜索中的目录。

然后我将%filename%更改为循环参数 - &gt; %%~n ~ lstr_declaredstr lstr_parmtotrans lstr_parmtotrans.id = 1 lstr_paramtotrans.name = "panya" lstr_paramtotrans.email = "panya@163.net" lstr_paramtotrans.homepage = "http://panya.163.net" 以删除潜在的双重引号。

答案 2 :(得分:1)

对于仍在Google上进行搜索的用户,简单的方法是打开所有包含需要在notepad ++中替换的文本的文件,按ctrl + F,单击“替换”,键入要查找和替换的内容,然后单击“全部替换” ,然后保存所有内容。