Windows バッチ スクリプトのテキスト ファイルから常に 'TRAILER' で始まる最後の行を削除します。

Windows バッチ スクリプトのテキスト ファイルから常に 'TRAILER' で始まる最後の行を削除します。

Windows バッチ スクリプトを使用して、テキスト ファイルから最後の行を削除したいのですが、最後の行は常に「TRAILER|」のようになります。どうすればこれを実現できますか。私の .txt ファイルは次のようになります。

1220|6963|トラック|5760|

1221|6964|トラック|1440|

1220|6965|トラック|2880|

1221|6966|トラック|2880|

1221|6967|トラック|2880|

トレーラー|5|

答え1

私は次のように書いてあなたのやり方を試しました:

findstr /v TRAILER %SFTP_INDIR%\Location*.txt > %IN_DIR%\loc.txt

ここ%SFTP_INDIR% = D:\Batch\Batch_FWK\SFTP\inbox.

出力ファイル loc.txt にはTRAILER|5|現在最後のレコードは含まれていませんが、出力ファイルには各レコードが次のように出力されています。

D:\Batch\Batch_FWK\SFTP\inbox\Location.20150528060210.txt:1220|6963|TRUCK|5760|

答えによるロメオ・ニノフ

findstr /v TRAILER filename >newfilename

希望通りに動作しますのみ最後の行を削除する場合シングルファイル。

それの訳は:

複数のファイルが検索された場合、結果の先頭にテキストが見つかったファイル名が付けられます。要求が明示的に 1 つのファイルに対して行われた場合、またはパイプ入力またはリダイレクト入力を検索する場合、ファイル名は印刷されません。

この制限を回避するには、forコマンドを使用して複数の単一ファイルを処理し、結果を 1 つのファイルに出力することができます。

バッチ ファイルで次のコマンドを試してください。

for /f "tokens=*" %%a in ('dir /b "%SFTP_INDIR%\Location*.txt"') do findstr /v TRAILER %%a >> %IN_DIR%\loc.txt

コマンドラインから実行する場合は、%%に置き換えます%


ソース検索文字列

関連情報