2012-02-14 7 views
0

私はこのサイトを何度も検索し、多くの関連する質問を見つけましたが、まったく私の質問にはまったく似ていませんでした...私はtxtファイル(%txtfile%.txt)の最後の2行目を削除するだけです。最後の2番目の理由は、ファイルがecho.Sample text>>"%txtfile%.txt"を使用して作成されたため、最後にemty行が残っていたためです。私は今空白行の最後の行EXCEPTを削除します。これはどうすればいいですか?バッチを使用してtxtファイルの2行目から最後の行を削除するにはどうすればよいですか?

答えて

0

最後の行の定義は、私とは異なります。文字のペア<CarriageReturn><LineFeed>が行を終了します。あなたのファイルの最後には、終了した行があり、その後は何もありません。テキストエディタでファイルを開き、ファイルの最後に移動すると、カーソルは空の行になります。しかし、その行は現在のファイルの一部ではありません。私の考えでは、最後の行は上の行です。

FINDを使用して行数を決定することができます。 FINDはまた、最後の行終端文字の後に行があるとは考えていません。次に、FINDSTRを使用して、各行に2番目のFINDSTRにパイプされた行番号を接頭辞として使用して、「最後の」行を除外します。 FORループは出力を読み取り、SET検索と置換は行番号接頭辞を削除します。遅れた展開は、%% L変数の展開中にファイル内容内に見つかった場合には、!が壊れてしまうのを防ぐため、ループ内でオンとオフを切り替えます。

@echo off 
setlocal disableDelayedExpansion 
set file="test.txt" 
for /f %%N in ('find /c /v "" ^<%file%') do set skip=%%N 
(
    for /f "delims=" %%L in ('findstr /n "^" %file%^|findstr /v "^%skip%:"') do (
    set "ln=%%L" 
    setlocal enableDelayedExpansion 
    echo(!ln:*:=! 
    endlocal 
) 
)>%file%.new 
move %file%.new %file% >nul 

上記のコードを実行すると、目的の行が削除されます。最後の行はまだ終了しているので、テキストエディタはファイルの最後の後に空行を表示します。

+0

良いことを除いて...もし私がhello、wazzup、およびl8rという別々の行にあるファイルを持っていると、wazzupが削除されるので、2行目から最後の行まで誤解しているかもしれません。私は188を削除することを意図していましたが、デフォルトの余分なスペースがあるので余分なスペースをスキップする必要がありました。 – BBMAN225

+0

@VDgames - 行数から1を減算しないでください。私は私の答えを編集しました。 – dbenham

+0

これは今すぐ動作します! – BBMAN225

関連する問題