且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2023-08-26 18:04:58

这对于拆下整个脚本最后N线


  • 计算总行

  • 设置线=行 - N,仍然只是加工流水线数

  @echo OFF
SETLOCAL EnableDelayedExpansion套系= 0
FOR / Fdelims ==%%我在(infile.txt)做(
    集/一个线路=行+ 1
)回声行总数:%LINES%
回声。:: N = 5,最后5行会忽略
集/一个LINES =行-5拨打:PrintFirstNLine> output.txt的转到EOF:PrintFirstNLine
设置CUR = 0
FOR / Fdelims ==%%我在(infile.txt)做(
    回声%%我
    ::回声!CUR! : %%一世
    集/一个CUR = CUR + 1
    如果!CUR!==%LINES%转到EOF
):EOF退出/ B

下面电话:PrintFirstNLine> output.txt的将给出一个外部文件名的输出的 output.txt的

输出作为样本输入

 <&PROJECT_NAME GT;
< CBA_Notifier>
    <公共和GT;
    <文件> D:\\ CBA \\ CBA_Notifier \\项目名\\ IPS-Util.jar< /文件>
    <文件> D:\\ CBA \\ CBA_Notifier \\项目名\\ Notifier.bat< /文件>
    <文件> D:\\ CBA \\ CBA_Notifier \\项目名\\ Notifier.xml< /文件>
    <文件> D:\\ CBA \\ CBA_Notifier \\项目名\\ Notifier.jar< /文件>
    < /通用>
    <&PROJECT_NAME GT;
        <文件> D:\\ CBA \\ CBA_Notifier \\ IPS-Util.bat< /文件>

删除最后5号线

更新

 :PrintFirstNLine
设置CUR = 0
FOR / F令牌= 1 * delims =]我%%中(类型infile.txt^ |找到/ V / N')做(
   如果%% J==(回声)其他(
        呼应。%%Ĵ
        集/一个CUR = CUR + 1
        )   如果!CUR!==%LINES%转到EOF

How to delete last n lines from file using batch script

I don't have any idea about batch files, I am writing batch file for the first time.

How should I write this batch file?

For Windows7

Try it for

<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>
            <File>D:\CBA\CBA_Notifier\IPS-Util.xml</File>
            <File>D:\CBA\CBA_Notifier\*BuildLog.bat</File>
        </Project_Name>
    </CBA_Notifier>
    <CCNET>

This the complete script for remove last N line

  • count the total line
  • set Line = Line - N , remain just processing lines number
@echo OFF
setlocal EnableDelayedExpansion

set LINES=0
for /f "delims==" %%I in (infile.txt) do (
    set /a LINES=LINES+1    
)

echo Total Lines : %LINES%
echo.

:: n = 5 , last 5 line will ignore 
set /a LINES=LINES-5

call:PrintFirstNLine > output.txt

goto EOF

:PrintFirstNLine
set cur=0
for /f "delims==" %%I in (infile.txt) do (      
    echo %%I        
    ::echo !cur! : %%I      
    set /a cur=cur+1    
    if "!cur!"=="%LINES%" goto EOF
) 

:EOF 

exit /b

Here call:PrintFirstNLine > output.txt will give the output in an external file name as output.txt

Output for sample Input

<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>   

remove last 5 line

Update

:PrintFirstNLine
set cur=0
for /F "tokens=1* delims=]" %%I in ('type "infile.txt" ^| find /V /N ""') do (
   if "%%J"=="" (echo.) else (
        echo.%%J
        set /a cur=cur+1    
        )  

   if "!cur!"=="%LINES%" goto EOF
)