2

バッチスクリプトを使用してファイルから最後の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>
4

4 に答える 4

4

これは、最後の N 行を削除するための完全なスクリプトです。

  • 合計行を数える
  • Line = Line - N を設定し、処理中の行番号だけを残します
@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

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

最後の 5 行を削除

アップデート

: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
)
于 2012-09-10T07:30:57.943 に答える
1

このスクリプトは、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 /y nullてゼロ バイト ファイルを作成します。

空のファイルを作成したくない場合は、その行を削除copy /y nulして、次の行に置き換えます。

if %lines% leq 0 del %1

いずれかの方法を使用する必要があります。そうしないと、5 行以下のソース ファイルがそのまま残ります。(置き換えも削除もされていません。)

于 2012-09-12T14:03:17.300 に答える
0

ファイルから最後の行を削除するには、

1 from- e:\original.txt のようにファイルから必要な開始行をコピーします。 2 e:\new\newfile1.txt のように新しいファイルに貼り付けます。

コードは、私にこのコードをくれた人のおかげです: 動機があり、血の hb =6 さえあれば、すべてが行われる可能性があることを覚えておいてください。しかし、あなたは自然の一部であるため、自然の助けが常に必要です

@echo off & setLocal enableDELAYedeXpansion set N= for /f "tokens=* delims= " %%a in (e:\4.txt) do ( set /a N+=1 if !N! gtr 264 goto :did

e:\new4.txt echo.%%a ) :did

800 個のファイルがある場合は、Excel を使用して 800 個のコードを作成し、それをメモ帳にコピーして、Ctrl+h を使用してスペースをスペースなしに置き換えます。次に、ファイルの名前を haha​​.bat に変更します。1.txt、2.txt、3.txt などの番号が付けられたファイルを含むフォルダーで実行します。

于 2015-10-12T06:45:49.593 に答える
0

コーディングの少ない遅い方法:

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:

ファイルにリダイレクトされる場合があります。
各行には行番号が前に付けられます。追加のコーディングで削除できます。私の回答のフラグ
付きの高速バージョン: How to split large text file in windows?/g

Win 10 CMD で、577KB ファイル、7669 行でテスト済み。

于 2020-04-24T15:40:05.220 に答える