批处理怎么进行复杂的批量替换?

作者&投稿:胥狮 (若有异议请与网页底部的电邮联系)
~

以下是一种实现方式,可以将其保存为.bat批处理文件执行:

bashCopy code@echo off
setlocal enabledelayedexpansionset "findstrPattern=[0-9.]+E[+-][0-9]+"set "replacementPattern=--------"for /f "delims=" %%i in (input.txt) do (  set "line=%%i"
set "firstTwo=!line:~0,15!"
set "rest=!line:~15!"
set "replaced=!rest:%findstrPattern%=%replacementPattern%!"
echo !firstTwo!!replaced!
)

其中input.txt为数据文件名,可以根据实际情况修改。该批处理文件的具体实现方法如下:

  • 首先设置了一个findstrPattern变量和一个replacementPattern变量,分别用于匹配要替换的文本和替换后的符号。

  • 使用for循环遍历输入文件的每一行数据。

  • 在循环中,首先将整行数据存储到line变量中。

  • 接着使用!line:~0,15!获取每行的前两个数,存储到firstTwo变量中。

  • 然后使用!line:~15!获取从第三个数开始到行末的字符串,存储到rest变量中。

  • 使用!rest:%findstrPattern%=%replacementPattern%!替换rest变量中所有匹配findstrPattern变量的字符串为replacementPattern变量中的符号,将替换后的字符串存储到replaced变量中。

  • 最后使用echo输出firstTwo和replaced变量拼接后的字符串。

  • 这个批处理文件中使用了延迟变量扩展,即在for循环中使用!括起变量名。这是因为在循环中修改变量时,如果使用%括起变量名,循环会一次性解析完所有变量后再开始执行,这样会导致变量的值无法正确更新。使用!括起变量名可以在每次循环中动态地解析变量,从而正确地更新变量的值。



复杂的批量替换可以通过使用正则表达式来实现。以下是一个示例:假设你有一个文本文件,其中包含许多日期,格式为“YYYY-MM-DD”,你想将它们全部替换为“MM/DD/YYYY”。1. 打开文本编辑器,如Notepad++或Sublime Text。2. 打开要进行替换的文本文件。3. 在编辑器中打开“查找和替换”功能。在Notepad++中,你可以使用快捷键Ctrl+H;在Sublime Text中,你可以使用快捷键Ctrl+Shift+H。4. 在“查找”字段中输入正则表达式“(\d{4})-(\d{2})-(\d{2})”,它将匹配所有格式为“YYYY-MM-DD”的日期。5. 在“替换”字段中输入“$2/$3/$1”,它将把日期格式转换为“MM/DD/YYYY”。6. 点击“替换全部”按钮,编辑器将自动替换所有匹配的日期。请注意,正则表达式的语法可能会因编辑器而异,因此请查看你使用的编辑器的文档以了解更多信息。

以下是一个实现:
@echo off
setlocal EnableDelayedExpansion

set input_file=data.txt
set output_file=output.txt

for /f "tokens=1,2,*" %%a in (%input_file%) do (
set line=%%a %%b
set line=!line: =_!
for /f "tokens=* usebackq" %%x in (`echo %%c ^| find /v "1.0E+00"`) do (
set line=!line! %%x
)
echo !line! >> %output_file%
)

echo Done.
其中:
- 使用了`for /f`循环读取输入文件中的每一行,并分别把前两个数据赋给`%%a`和`%%b`,剩余数据赋给`%%c`。
- 把前两个数据组成一个子字符串`!line!`。
- 遍历`%%c`,把不等于`1.0E+00`的数据拼接到`!line!`中。
- 把`!line!`写入输出文件。
注意,这个实现会忽略空格和制表符开头的行。如果需要处理这些行,可以添加如下内容:

if "!line!" == "" (
set line=%%a %%b
)

不清楚你的实际文件/情况,仅以问题中的样例/说明及猜测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI/GB2312,跟要处理的文件放一起双击运行
<# :
cls&echo off&cd /d "%~dp0"&mode con lines=5000
rem 将一个txt文本文件内每一行指定特征的字段中的每个字符替换成指定字符
path %SYSTEMROOT%\System32\WindowsPowerShell\v1.0;%path%
set #=Any questions&set _=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%_% %z%
set "current=%cd%"
powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
echo;%#% +%$%%$%/%_% %z%
pause
exit
#>
$current=($env:current).trimend('\');
$files=@(dir -literal $current|?{('.txt' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
if($files.length -ge 1){
    $enc=New-Object System.Text.UTF8Encoding $False;
    $text=[IO.File]::ReadAllLines($files[0], $enc);
    for($i=0;$i -lt $text.count;$i++){
        $m=[regex]::match($text[$i], '^(\s*?\S+\s+\S+)(\s+\S.*)$');
        if($m.Success){
            $text[$i]=$m.groups[1].value+[regex]::replace($m.groups[2].value, '\S+', {
                param($r);
                if($r.groups[0].value -ne '1.0E+00'){
                    return ($r.groups[0].value -replace '\S','-');
                }else{return $r.groups[0].value;}
            });
        }
        $text[$i];
    }
}


可以使用批处理中的for循环和字符串操作来实现。
下面是一个可能的实现方式:
@echo off
setlocal enabledelayedexpansionset "target=1.0E+00"set "replacement=-------"for /f "tokens=1-7" %%a in (input.txt) do ( set "line=%%a %%b %%c %%d %%e %%f %%g"
set "output=!line:*%%b=!"
set "output=!output:%target%=%replacement%!"
echo %%a !output!
)

其中,target是需要替换的目标字符串,replacement是替换后的字符串。
在for循环中,使用tokens=1-7将每行的数据分成7个部分,分别对应%%a到%%g。
接下来,将整行数据赋值给变量line。由于需要对%%b之后的部分进行替换,因此需要先将%%b之前的部分从line中删除,然后将删除后的字符串赋值给变量output。
最后,使用!output:%target%=%replacement%!将output中的目标字符串替换为指定的字符串。
这里使用了setlocal enabledelayedexpansion开启了延迟环境变量扩展,这样可以在循环中使用!output!的形式来访问变量。


怎么处理复杂的大家庭关系
处理好复杂的家庭关系,最好的方法就是:爱与感动、表率与行动、冷静与包容。1、融入其中 每个人在家庭中都是主人,只是角色不同,要扮演好自己的角色,家庭问题就好解决,每个人都要自己做好自己,不干涉别人的是非,这样就会减少矛盾的发生。2、底线原则 每个人都是有自己的底线,不要轻易去触碰对方...

处理复杂问题最高明的方式
处理复杂问题最高明的方式 稳住情绪 生活高低起伏,谁都免不了会遇到一 些不顺心的事。真正强大的人,可以在面对 复杂情况时稳住情绪,做到临危不乱,积极 寻求解决问题的方法。 心中有数,才能有条不紊;稳住情绪,才能从容处世。不让自己的行为受制于坏 情绪,才更有能力去把控人生。 从自身找原因 有的人习惯于把...

...有没有遇到比较复杂繁琐的事情?你是怎么处理的?
实践经历中我是通过以下几方面来处理的:第一,明确思想,服务群众。要理解这份工作的意义所在,“民之所忧,我之所思;民之所思,我之所行”认识到自己的责任,绝不能退缩,把自己的热情投入到工作中去,用热情带动工作,把复杂的事情简单化。第二,研读政策,深入群众。一方面,学习各种脱贫政策,结...

该怎么处理复杂的人际问题?
使用网络聊天时,多使用一些表情符号用以烘托气氛。开玩笑可以,不要让对方下不来台 。一定要合群,爱说话,活泼些,这样招人喜欢。和长辈说话要有礼貌,谦卑不傲,事事不要以自我为中心,多用眼睛观察对方的一举一动,往往这些动作可以表达出对方的想法,以便于自己想想该说什么样的话。以上我只是简单的...

机关工作,如何处理好同事间复杂的人际关系
如果认识就没有什么复杂的,到节日的时候就群发几个祝福资讯,也可以针对重要的人进行单独祝福等,平时多去跟朋友圈里的人互动,这样就ok了、。 说说公司复杂的人际关系如何处理? 担心处理人际关系?我有八法: 1、弄清部门职责,记熟本人的岗位职责。不越位!不要种了别人的田荒了自己的地还不落好。这就好比司机管...

复杂的关系怎么处理
1、走自己的路,让别人去说 与有嫉妒心的人相处时,最好不要特意采取一些方式方法来对付有嫉妒心的人。因嫉妒心理本身就是多疑的、爱猜忌的。所以,倒不如将有嫉妒心的人当作普通人来看待,俗话说,见怪不怪,其怪自败。与其说费尽心思去琢磨,不如来个“无为而治”,落得个“无为而无不为”...

如何有效地处理职场中复杂的人际关系?
切忌谈论别人的八卦,不要背后议论他人的私事,尊重别人的隐私,与每个人先保持适当距离。处理好与领导、同事的职场关系;任何一个领导至少有某些过人处。他们丰富的工作经验和待人处事方式,都是值得我们学习借鉴的,我们应该尊重他们的技能和业绩,在团队中真诚待人,对工作抱着一颗积极向上的心,才能更好...

复杂的问题需要复杂的方法才能解决。()a对b错
以上方法都可以根据问题的性质、特点和复杂程度进行灵活选择和组合使用,找到最佳的解决方案。复杂问题简单化原理是指将复杂问题分解成更小、更容易理解和处理的部分,以便更好地理解和解决整个问题。这个原理可以通过以下方法来实现:1、分解问题:将复杂问题分解成更小、更具体的问题,逐个解决,最终得出整个...

在处理复杂的社会科学问题时,如何确保所使用的数据和分析方法能得出准确...
4. 使用合适的分析方法:选择合适的分析方法非常重要,以确保分析结果准确和可靠。应该使用最先进的技术和方法,以获得最佳结果。5. 进行多重检验:为了确保结果的准确性和一致性,应该使用多个独立的分析方法进行多重检验。6. 公开透明:在研究过程中应该公开透明,包括数据来源、分析方法和结果。这将有助...

我不懂得怎么处理好复杂的人与人之间的关系,该怎么办啊
63、去想想你如何才能让自己身边的每个人都取得成功 当有人告诉你他遇到了点问题,你要想想有什么办法。解决办法源自于你的经验、你的知识,还有你的朋友、你帮手。64、主动提供帮忙 不要等别人提出了才帮助,要主动。 65、传播知识 当你财务和人脉都还不多时,要想通过社交获利也是可行的。这是是要通过知识。你...

泽州县19151113313: 如何用批处理文件批量更改有规律的文件名? -
邴贷轻畅: 只要有规律就好..给你个批处理,可以批量替换文件名中的相同字符, 比如你可以批量把文件名中的_1_替换为_3_,但是千万别直接把1替换为3,这样有3的地方全部变成1了. 切记切记!! @echo off echo.&echo.echo 说明:echo.echo 使...

泽州县19151113313: 批处理 实现批量替换多个文本文档中指定行中的字符或修改行中内容 -
邴贷轻畅: 下午求教了一个问题: 有一个config.txt文本文件,首先要查找其中的第5行的内容是否与指定符串 DEFA=TEST 完全相同,如不是,则用指定的 DEFA=TEST 将该行的内容替换掉,该问题已得到 睿之锐 朋友的完美解答如下: @echo off&...

泽州县19151113313: 用批处理怎么实现批量修改word文件? -
邴贷轻畅: 用查找替换按CTRL+H打开"替换"对话框,在查找内容框中输入指定单词在替换为框中输入其他单词单击"全部替换"就可以了

泽州县19151113313: 如何利用批处理批量替换文本内不同内容的字符 -
邴贷轻畅: @echo off setlocal enabledelayedexpansion for /f "tokens=*" %%i in ('dir/b') do ( set fn=%%i set fn=!fn:(=_! ren "%%i" "!fn:)=!")

泽州县19151113313: 如何进行批量替换?采用批处理命令、linux文本处理命令或其它脚本均可. -
邴贷轻畅: 用数据库做个链接一下子就搞定了, 把这些数据输入office access 或者openoffice base 做一下关系数据的链接就可以了 然后在输出到excel等电子表软件就好了举个例子,比如你用access , 吧两个表格都导入 然后到查询视图,建立两个表格的关系:吧你要建立链接的两个列用直线连接起来,然后执行查询,就直接出来已经配对好的结果了.秒杀的.当然excel也可以做,就是要设置功能函数,具体那个我忘了,毕竟最方便的做法是上面的做法.

泽州县19151113313: 批处理 如何批量替换不同文件夹中相同文件名中的不同内容 -
邴贷轻畅: 要做这样的文本处理,至少要用到vbs 我个人建议用autoit,简单而且有成熟的帮助. 如果熟perl,那是对付文本处理效率最高的语言.

泽州县19151113313: 用批处理怎么批量替换、填充文本里面的内容? -
邴贷轻畅: 用软件Replace Pioneer可以很容易把ID.txt的文本填充到适当的位置,详细步骤:1. 把ID.txt放到d:\test\目录下2. ctrl-o打开文件:汇总.txt3. ctrl-h打开replace窗口* 在search for pattern输入待搜索的词,比如:ID = (空)* 在replace with pattern输入新词,比如:ID = file_line('d:\\test\\ID.txt',$word_no)4. 点击replace即可.5. ctrl-s保存.注意:* 搜索词要和文本中完全一致,不能多空格或少空格* 第3步的目录分隔符要用双反斜杠\\

泽州县19151113313: 如何批处理excel表格中的字符替换?? -
邴贷轻畅: 用这个吧.EXCEL超级替换 1.0 http://www.onlinedown.net/soft/46606.htm 本程序可以实现多种要求的替换:(1)搜索范围可以为指定行或列、选定工作表、整个工作簿,(2)搜索内容包括所有英文字母、所有汉字等等,如果替换值为空表示删...

泽州县19151113313: 如何用批处理完成将文件夹及其子文件夹里所有文件的文件名相同文件名批量替换成另外一个名字?谢谢~ -
邴贷轻畅: @echo off::设置相同的文件名,包括后缀名 set Same=我的图片.jpg::设置更改后的文件名,包括后缀名 set New=新名称.jpgfor /f "delims=" %%a in ('dir /a-d/s/b "%Same%"') do ren "%%~a" "%New%" pause放在要处理的文件夹里执行,看看是不是您要的效果.?

泽州县19151113313: bat 批处理 怎样批量把文件名中的一个汉字替换为另一个 -
邴贷轻畅: @echo off title 文件名字符替换5261 mode con cols=60 lines=20 ::文件要是重名4102,会提示错误. setlocal EnableDelayedExpansion & color 0a :1 set a= set b= set c= cls&echo. set /p a= 请输入要被替换的字符: cls&echo. set /p b= 请输入...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网