bat批量替换txt文件内的指定内容?
发布网友
发布时间:2022-04-24 21:18
我来回答
共2个回答
热心网友
时间:2022-04-24 22:48
这个估计有点难吧,因为txt文件内的都是字符串,如果仅是字符串的替换估计还有点戏,但你这还有计算,首先要转换成数值 才能进行比较,替换。
如果你这些文本文件是某软件导出的,看能否导出到xls文件,这样可能更好处理一点。
热心网友
时间:2022-04-25 00:06
不清楚你的实际文件/情况,仅以问题中的样例/说明为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起双击运行
<# :
cls&echo off
rem 将多个txt文本文件里的指定范围内的数字替换成另外指定范围内的随机数字
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
set "newfolder=#result"
if not exist "%newfolder%" md "%newfolder%"
powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312')))) -Args '%~f0'"
echo;%#% +%$%%$%/%@% %z%
pause
exit
#>
$newfolder=get-item -liter $env:newfolder;
$self=get-item -liter $args[0];
$path=$self.Directory.FullName;
$files=@(dir -liter $path|?{('.txt' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
if($files.length -ge 1){
$enc=[Text.Encoding]::GetEncoding('GB2312');
write-host $files[0].Name;
$text=[IO.File]::ReadAllText($files[0].FullName,$enc);
$text=[regex]::replace($text,'-?\d+(\.\d+)?',{
param($m);
$a=1*$m.groups[0].value;$b=$a;
if(($a -ge 400) -and ($a -le 500)){$b=get-random -min 700 -max 900}
$b;
});
$newfile=$newfolder.FullName+'\'+$files[0].Name;
[IO.File]::WriteAllText($newfile,$text,$enc);
}