我对批处理脚本没有多少经验,我的雇主要求我编写一个批处理脚本,可以运行该脚本来查找和替换目录中所有匹配文件中的一些文本。
我已经尝试过搜索这个并且有一吨资源,我过去常常让我这么做:
@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显示了如何在目录中执行所有文件,但我不知道如何调整它以满足我的需求。
有人可以帮我吗?
答案 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,单击“替换”,键入要查找和替换的内容,然后单击“全部替换” ,然后保存所有内容。