时间:2021-05-22
Perl脚本batchReplace.pl可以用来批量替换文件中的文字/代码。可在指定目录中查找指定类型的文件,并递归检查子目录;在输出文件时复制输入文件的目录结构。
[附件]Win32应用程序batchReplace.exe是由Perl脚本编译产生的可执行程序,不需安装Perl运行环境即可执行。
在命令行中使用
batchReplace.exe[-i输入文件路径(或包含文件的目录)][-o输出文件位置(文件或目录)][-c批量输入文件的扩展名,以“.”开始,多个扩展名之间以“|”隔开][-m匹配模式][-I(忽略匹配内容的字母大小写)][-G(全局查找要匹配的内容)][-e例外的字符串,是对匹配模式的补充,如果在匹配结果中发现有这样的字符串,做不匹配处理][-r替换的内容]
上述参数没有顺序限制。当-o参数所涉及的文件路径不存在时,会自动创建。当输出文件已经存在时,文件原有的内容将被覆盖。(安全起见,请不要输出到输入文件的原始位置,以免造成不可恢复的损失。)
例如:
batchReplace.exe-id:\gaoshu1-od:\do\123\456-ehttp:///viewthread.php?tid=2734388
my$match;
my$replacement='';
my$insensitive=0;
my$global=0;
my$gi;
my$go;
my$Checktype=".htm|.html";
my$except;
if(open(setfile,"<batchReplace.set"))
{
while(<setfile>)
{
if(/^\s*-I/){$insensitive=1}
if(/^\s*-G/){$global=1}
if(/^\s*-m=(.+)/){$match=$1}
if(/^\s*-r=(.+)/){$replacement=$1}
if(/^\s*-e=(.+)/){$except=$1}
if(/^\s*-i=(.+)/){$gi=$1}
if(/^\s*-o=(.+)/){$go=$1}
if(/^\s*-c=(.+)/){$Checktype=$1}
if(/^\s*Insensitive/){$insensitive=1}
if(/^\s*Global/){$global=1}
if(/^\s*Match=(.+)/){$match=$1}
if(/^\s*Replacement=(.+)/){$replacement=$1}
if(/^\s*Except=(.+)/){$except=$1}
if(/^\s*Input=(.+)/){$gi=$1}
if(/^\s*Output=(.+)/){$go=$1}
if(/^\s*CheckType=(.+)/){$Checktype=$1}
}
}
my$para=''.join('',@ARGV);
if($para=~/-I*/){$insensitive=1}
if($para=~/-G*/){$global=1}
my@ti=split(/-i*/,$para);
if($ti[1]){($gi)=split(/-(o|i|c|e|m|r|I|G)/,$ti[1])}
unless($gi){print"No\"Inputpath\"parameter!";exit}
my@to=split(/-o*/,$para);
if($to[1]){($go)=split(/-(o|i|c|e|m|r|I|G)/,$to[1])}
unless($go){print"No\"Outputpath\"parameter!";exit}
my@tc=split(/-c*/,$para);
if($tc[1]){($Checktype)=split(/-(o|i|c|e|m|r|I|G)/,$tc[1])}
my@te=split(/-e*/,$para);
if($te[1]){($except)=split(/-(o|i|c|e|m|r|I|G)/,$te[1])}
my@tr=split(/-r*/,$para);
if($tr[1]){($replacement)=split(/-(o|i|c|e|m|r|I|G)/,$tr[1])}
unless($match){$match="<iframe[^>]*>[\\s\\S]*?<\\/iframe>";
$insensitive=1;
$global=1}
my@tm=split(/-m*/,$para);
if($tm[1]){($match)=split(/-(o|i|c|e|m|r|I|G)/,$tm[1])}
unless($match){print"No\"MatchPattern\"parameter!";exit}
my$checktyp='(';
$Checktype=~s/\./\\\./g;
$Checktype=~s/\|/\)\|\(/g;
$checktyp.=$Checktype.')$';
my$excep;
if($except){
$excep=$except;
$excep=~s/\//\\\//g;
$excep=~s/\./\\\./g;
$excep=~s/\|/\\\|/g;
$excep=~s/\[/\\\[/g;
$excep=~s/\]/\\\]/g;
$excep=~s/\(/\\\(/g;
$excep=~s/\)/\\\)/g;
$excep=~s/\$/\\\$/g;
$excep=~s/\?/\\\?/g;
}
my$replacemen;
if($replacement){
$replacemen=$replacement;
$replacemen=~s/\//\\\//g;
$replacemen=~s/\./\\\./g;
$replacemen=~s/\|/\\\|/g;
$replacemen=~s/\[/\\\[/g;
$replacemen=~s/\]/\\\]/g;
$replacemen=~s/\(/\\\(/g;
$replacemen=~s/\)/\\\)/g;
$replacemen=~s/\$/\\\$/g;
$replacemen=~s/\?/\\\?/g;
}
subcFile
{
my$fi;
($fi)=@_;
if(opendir(DIR,$fi))
{
my@dir=readdir(DIR);
closedirDIR;
if("\\"eqsubstr$fi,(length$fi)-1){$fi=substr($fi,0,(length$fi)-1)}
my@subdirs=grep{/^(?!\.)/&&-d"$fi\\$_"}@dir;
foreachmy$subdir(@subdirs)
{
cFile("$fi\\$subdir")
}
@files=grep{/$checktyp/i&&-T"$fi\\$_"}@dir;
foreachmy$fil(@files)
{
my$bp='';
$bp=(substr$fi,(length$gi))."\\";
my$bi="$fi\\$fil";
my$bo=$go.$bp.$fil;
remove($bi,$bo)
}
}
}
unless("\\"eqsubstr$go,(length$go)-1){$go.="\\"}
if(-d$gi)
{
unless("\\"eqsubstr$gi,(length$gi)-1){$gi.="\\"}
cFile($gi);
}
else
{
my$bu=substr$gi,(rindex$gi,'\\');
my$bo=$go.$bu;
remove($gi,$bo)
}
print"\nProcessFinished!";
print"\n-i:$gi";
print"\n-o:$go";
print"\n-m:$match";
if($except){print"\n-e:$except"}
if($replacement){print"\n-r:$replacement"}
subremove
{
my$bi;
my$bo;
($bi,$bo)=@_;
print"\nprocessing$bi...\n";
unless(open(INPUT,"<$bi")){print"\n[Warn]Cannotopenthefile<$bi>:$!";return}
my@conts=<INPUT>;
closeINPUT;
my$cont=join'',@conts;
my$c;
if($insensitive)
{
if($global)
{
unless($cont=~s/($match)/${$c=Cexcept($1)}$c/gi){die"$!"}
}
else
{
unless($cont=~s/($match)/${$c=Cexcept($1)}$c/i){die"$!"}
}
}
else
{
if($global)
{
unless($cont=~s/($match)/${$c=Cexcept($1)}$c/g){die"$!"}
}
else
{
unless($cont=~s/($match)/${$c=Cexcept($1)}$c/){die"$!"}
}
}
unless(open(OUT,">$bo"))
{
if($!==2)
{
my$dbo=substr$bo,0,(rindex$bo,'\\');
if(opendir(OUTDIR,$dbo)){closedirOUTDIR;print"\n[Warn]Cannotopentheoutputfile<$bo>:$!";exit}
else
{
if($!==2)
{
unless(pmkpath($dbo)){print"\n[Warn]Cannotcreattheoutputdirectory<$dbo>:$!";exit}
unless(open(OUT,">>$bo")){print"\n[Warn]Cannotopentheoutputfile<$bo>:$!";exit}
}
else{print"\n[Warn]Cannotopentheoutputdirectory<$dbo>:$!";exit}
}
}
else{print"\n[Warn]Cannotopentheoutputfile<$bo>:$!";exit}
}
printOUT"$cont";
closeOUT;
}
subpmkpath
{
my@p=split(/\\/,shift);
my$pa=$p[0];
my$m=$#p+1;
my$t;
for($t=1;-e$pa;$t++){$pa.='\\'.$p[$t]}
unless(mkdir$pa){return0}
for(;$t<$m;$t++)
{
$pa.='\\'.$p[$t];
unless(mkdir$pa){return0}
}
return1
}
subCexcept
{
unless($except){return$replacemen}
my$con;
($con)=@_;
if($con=~/$excep/){return$con}else{return$replacemen}
}
打包的exe文件下载
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在word和excel等办公软件中都有查找和替换工具,很方便的可以找到需要查找或替换相应的内容,那么在浩辰CAD当中也有很多内容相同的文字的快速替换的方法,
使用str-replace而不是ereg-replace习惯使用Perl进行编程的程序员更加愿意使用ereg_replace完成字符串替换工作,因为在PHP中e
dreamweaver工具,在替换那里自己写了一个正则,批量匹配后,果然不让我失望!感叹正则的强大啊!正则规则如下复制代码代码如下:正则查找替换成如图用js批量
word里批量替换文字或字符很容易,但是如果批量替换或删除有下划线的文字或字符呢?这里需要用到替换的高级功能,以office2013版为例。下面一起随小编去看看
刚刚我们介绍了Word2016将文字批量替换成图片的方法,现在我们希望将图片批量替换成文字,又该怎么操作呢?请看下文详细介绍。软件名称:Word2016form