说明:1、文件夹下有大量txt文档,且每个文档都有多行内容,最少的也有两行内容。2、需要批量删除这些txt文档的第2行以后的内容,也就是说只保留第一行和第二行的内容。
bat和txt的编码须存为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 #> $num=2; $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; $arr=New-Object -TypeName System.Collections.ArrayList; $text=[IO.File]::ReadAllLines($files[0].FullName,$enc); for($j=0;$j -lt $text.length;$j++){ if(($j+1) -le $num){[void]$arr.add($text[$j]);} } $newfile=$newfolder.FullName+'\'+$files[0].Name; [IO.File]::WriteAllLines($newfile,$arr,$enc); }