批处理或正则:怎么批量删除txt中指定字数以上的行?

我有很多txt,txt中有很多行的内容,对于一些字数比较多的行,我需要删除,比如,大部分行都是100个字,有几行是200个字,我想批量删除这些超过100个字的行。

第1个回答  2021-05-19
不清楚你的实际文件/情况,仅以问题中的样例/说明为据;以下代码复制粘贴到记事本,另存为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
#>
$maxcount=100;
$newfolder=get-item -liter $env:newfolder;
$self=get-item -liter $args[0];
$path=$self.Directory.FullName;
$enc=[Text.Encoding]::GetEncoding('GB2312');
$files=@(dir -liter $path|?{('.txt' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
if($files.length -ge 1){
write-host $files[0].Name;
$arr=New-Object -TypeName System.Collections.ArrayList;
$text=[IO.File]::ReadAllLines($files[0].FullName,$enc);
for($j=0;$j -lt $text.count;$j++){
if($text[$j].length -le $maxcount){[void]$arr.add($text[$j]);}
}
$newfile=$newfolder.FullName+'\'+$files[0].Name;
[IO.File]::WriteAllLines($newfile,$arr,$enc);
}追问

大神,出现这个,怎么处理?保存成utf-8就闪退,保存成ansi,要么保存不上,要么自动删字符就不好用了,请指教

第2个回答  2021-05-18
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "tokens=1,* delims=:" %%a in ('findstr /N . %1') do (set a=%%b
for /l %%z in (1,1,200) do if "!a:~%%z,1!" neq "" set z=%%z
if !z! lss 100 echo !a! >>%~n1-new%~x1
)
pause
处理单个文件的,将文本拖入批处理里面即可生成删除超字符的新文本追问

大神,总是闪退怎么解决?

追答

将文本拖入批处理里面

相似回答