Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 使用批处理文件从文件中删除最后n行_File_Windows 7_Batch File - Fatal编程技术网

File 使用批处理文件从文件中删除最后n行

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&

如何使用批处理脚本从文件中删除最后n行

我对批处理文件一无所知,我是第一次写批处理文件

我应该如何编写此批处理文件

适用于Windows7

试试看

<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中对我来说非常有效:(,其转义空行事实上,在WinXP
FOR/?
自动忽略空行:(@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: