File 使用批处理文件从文件中删除最后n行
如何使用批处理脚本从文件中删除最后n行 我对批处理文件一无所知,我是第一次写批处理文件 我应该如何编写此批处理文件 适用于Windows7 试试看File 使用批处理文件从文件中删除最后n行,file,windows-7,batch-file,File,Windows 7,Batch File,如何使用批处理脚本从文件中删除最后n行 我对批处理文件一无所知,我是第一次写批处理文件 我应该如何编写此批处理文件 适用于Windows7 试试看 <Project_Name> <Noter> <Common> <File>D:\Project_Name\Util.jar</File> <File>D:\Project_Name\Noter.bat</File&
<Project_Name>
<Noter>
<Common>
<File>D:\Project_Name\Util.jar</File>
<File>D:\Project_Name\Noter.bat</File>
<File>D:Project_Name\Noter.xml</File>
<File>D:Project_Name\Noter.jar</File>
</Common>
<Project_Name>
<File>D:\Util.bat</File>
<File>D:\Util.xml</File>
<File>D:\log.bat</File>
</Project_Name>
</Noter>
<CCNET>
D:\Project\u Name\Util.jar
D:\Project\u Name\Noter.bat
D:Project\u Name\Noter.xml
D:Project\u Name\Noter.jar
D:\Util.bat
D:\Util.xml
D:\log.bat
这是删除最后N行的完整脚本
- 数一数总行数
- 设置Line=Line-N,只保留处理行数
call:PrintFirstNLine>output.txt
将以output.txt的外部文件名给出输出
输出用于样本输入
<Project_Name>
<CBA_Notifier>
<Common>
<File>D:\CBA\CBA_Notifier\Project_Name\IPS-Util.jar</File>
<File>D:\CBA\CBA_Notifier\Project_Name\Notifier.bat</File>
<File>D:\CBA\CBA_Notifier\Project_Name\Notifier.xml</File>
<File>D:\CBA\CBA_Notifier\Project_Name\Notifier.jar</File>
</Common>
<Project_Name>
<File>D:\CBA\CBA_Notifier\IPS-Util.bat</File>
此脚本将接受1个参数,即要集群的文件,创建一个临时文件,然后用较短的文件替换原始文件
@echo off
setlocal enabledelayedexpansion
set count=
for /f %%x in ('type %1 ^| find /c /v ""') do set /a lines=%%x-5
copy /y nul %tmp%\tmp.zzz > nul
for /f "tokens=*" %%x in ('type %1 ^| find /v ""') do (
set /a count=count+1
if !count! leq %lines% echo %%x>>%tmp%\tmp.zzz
)
move /y %tmp%\tmp.zzz %1 > nul
如果原始文件为5行或更少行,则主输出例程将不会创建文件。为了解决这个问题,我使用copy/ynull
创建了一个零字节文件
如果您不希望有一个空文件,只需删除copy/y nul
行,并将其替换为以下行:
if %lines% leq 0 del %1
您应该使用一种或另一种方法,否则具有5行或更少行的源文件将保持不变。(既不替换也不删除。)要从文件中删除最后一行 1从-e:\original.txt这样的文件中复制所需的起始行 2将它们粘贴到新文件中,如-e:\new\newfile1.txt 代码感谢给我此代码的人: 记住,如果你有动机,甚至血液hb=6,一切都可以完成。但是大自然的帮助总是需要的,因为你是大自然的一部分 @echo off&设置本地启用延迟扩展 设置N= 对于(e:\4.txt)do中的/f“tokens=*delims=“%%a( 设置/a N+=1 如果!N!全球技术法规264转到:没有 e:\new4.txt echo.%%a ) :有
如果您有800个文件,请使用excel为800生成代码,然后将其复制到记事本,并使用Ctrl+h将空格替换为无空格。然后将文件重命名为haha.bat。在文件夹中运行,文件编号为1.txt 2.txt 3.txt等。欢迎任何查询Erkamaldev@gmail.com“Bharata万岁”一种编码较少的缓慢方法:
set input=file.txt
set remove=7
for /f "delims=" %i in ('find /c /v "" ^< "%cd%\%input%"') do set lines=%i
set /a lines-=remove
for /l %i in (1,1,!lines!) do findstr /n . log.txt | findstr /b %i:
set input=file.txt
设置删除=7
对于/f“delims=“%i in('find/c/v”“^<%cd%\%input%”),请设置行=%i
设置/a行-=删除
对于(1,1,!行!)中的/l%i,请查找SR/n。log.txt | findstr/b%i:
可以重定向到文件每行都以行号作为前缀;可通过额外编码删除。
更快的版本,在我的回答中带有
/g
标志:在Win 10 CMD中测试,577KB文件,7669行。@Desislav Kamenov For windows 7..代码运行良好,但问题是,当它得到一条空行时,它会在该位置打印出
回声。@sachinmheter它在WinXP中对我来说非常有效:(,其转义空行事实上,在WinXPFOR/?
自动忽略空行:(@SachinMhetre,更新了答案,也在win7中进行了测试。希望这对您有用。这是一个很好的解决方案,但也有一些缺点。当该行以]开头时,您将丢失字符。
。如果存在类似\\\\\\\\\..\windows\system32\calc.exe的行,您会遇到真正的问题
if %lines% leq 0 del %1
set input=file.txt
set remove=7
for /f "delims=" %i in ('find /c /v "" ^< "%cd%\%input%"') do set lines=%i
set /a lines-=remove
for /l %i in (1,1,!lines!) do findstr /n . log.txt | findstr /b %i: