如何利用.bat将文件的字符串的行区间替换?
发布网友
发布时间:2022-10-20 09:22
我来回答
共1个回答
热心网友
时间:2024-11-21 09:19
不清楚你的实际文件/情况,仅以问题中的样例/说明为据;以下代码复制粘贴到记事本,另存为xx.bat,跟要处理的文件放一起双击运行;bat和txt需存为ANSI/GB2312编码
-----------------------------------------
<# :
cls&echo off&cd /d "%~dp0"
rem 将一个xml文件里的一段指定特征字符内容替换成一个txt文本文件里的内容
set #=Any question&set _=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%_% %z%
set "xmlfile=xxx.xml"
set "txtfile=sourse.txt"
set "newfolder=#result"
if not exist "%xmlfile%" (echo;"%xmlfile%" 未找到&pause&exit)
if not exist "%txtfile%" (echo;"%txtfile%" 未找到&pause&exit)
if not exist "%newfolder%" md "%newfolder%"
powershell -NoProfile -ExecutionPolicy bypass "[IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312'))|Invoke-Expression"
echo;%#% +%$%%$%/%_% %z%
pause
exit
#>
$xmlfile=get-item -liter $env:xmlfile;
$txtfile=get-item -liter $env:txtfile;
$newfolder=get-item -liter $env:newfolder;
$enc=New-Object System.Text.UTF8Encoding $False;;
$text1=[IO.File]::ReadAllText($xmlfile.FullName, $enc);
$text2=[IO.File]::ReadAllText($txtfile.FullName, $enc);
$text1=[regex]::replace($text1,'(?i)(<GroupName>Algo_Dubins</GroupName>\s*?<Files>)[\s\S]*?(</Files>)', {
param($m);
$m.groups[1].value+$text2+$m.groups[2].value;
});
$newfile=$newfolder.FullName+'\'+$xmlfile.Name;
[IO.File]::WriteAllLines($newfile, $text1, $enc);追问powershell -NoProfile -ExecutionPolicy bypass "[IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312'))|Invoke-Expression"的作用看不懂,能麻烦你给每行加上注释吗?
ps:我修改了提问,希望希望替换掉和之间的行,想问一下哪一句是替换的语句,哪一句又是定位Algo_Dubins这串字符的语句呢?
我试过了,你的代码里没有换行啊