2016-10-25 9 views
3

は、これは私のTXTファイルです:私は必要なもの削除選択した行は

Volume in drive N is ABSdrive 
Volume Serial Number is BLA - BLA 

Directory of n:\ggg\gggg\ggg\ggggg 

25/10/2016 09:46   138,813 gggggg.csv 
       1 File(s)  00000 bytes 
       0 Dir(s) 00000000 bytes free 

のみ、このラインで.txtファイルをある

25/10/2016 09:46   138,813 gggggg.csv 

ではありません空行この情報を含む1行のテキストファイル(上または下)。

.batファイルを使用して作成する方法はありますか?

+0

こんにちはデニス、これはあなたが対処しなければならないtxtファイルですか、それともあなた自身のdir cmdを発行しますか?所定の名前+ extのファイルは1つだけですか? – LotPings

+0

はもっと多くのファイルになる可能性がありますが、私もそれを1つのファイルでも動作させることができます。 – Denis

答えて

0

は、テキストを解析するfor /F loopを使用します。

@echo off 
for /F "usebackq skip=5 delims=" %%E in ("\path\to\your\text\file.txt") do (
    set "LINE=%%E" 
    goto :EXIT_FOR 
) 
:EXIT_FOR 
echo %LINE% 

skip=5オプションは、最初の5行を無視するfor /Fに指示します。 gotoコマンドは、最初のスキップされていない行を読み取った後にループを抜けます。変数LINEは最終的に関心のある行を保持します。

代わりgotoを使用して、あなたはまた、このように、テキストの1つの特定の行を選択するために、変数がすでに定義されているかどうかを確認することができます:テキストファイルの内容が出力のように見える

@echo off 
set "LINE=" 
for /F "usebackq skip=5 delims=" %%E in ("\path\to\your\text\file.txt") do (
    if not defined LINE set "LINE=%%E" 
) 
echo %LINE% 

dirコマンド(dir "n:\ggg\gggg\ggg\ggggg\gggggg.csv"のようなもの)のあなたは、最初のテキストファイルに保存することなく、for /Fで直接このようなコマンドの出力を解析することができます - を参照して、この:

@echo off 
for /F "skip=5 delims=" %%E in ('dir "n:\ggg\gggg\ggg\ggggg\gggggg.csv"') do (
    set "LINE=%%E" 
    goto :EXIT_FOR 
) 
:EXIT_FOR 
echo %LINE% 

または:

@echo off 
set "LINE=" 
for /F "skip=5 delims=" %%E in ('dir "n:\ggg\gggg\ggg\ggggg\gggggg.csv"') do (
    if not defined LINE set "LINE=%%E" 
) 
echo %LINE% 
+0

echo%LINE%> output.txtあなたのコードは完全にスーツです。 – Denis

0

findstrコマンドを使用して、出力を新しいテキストファイルoutfile.txt に書き込むことができます。次に、ファイル内のその正確な文字列を検索できます。ただし、検索された文字列が行に正確に一致する場合にのみ、出力がファイルに書き込まれます。

findstr /x "25/10/2016 09:46   138,813 gggggg.csv" infile.txt > outfile.txt 

ははfindstrコマンドの詳細については、私は、これは

+0

これは仕事の一部で、毎日異なるファイルがあります。特定の行1-5と7-8を削除し、必要なものだけを残す方法があるかもしれませんか? – Denis

+0

または行6を別の.txtファイルにコピーします。 – Denis

+0

あなたはまったく新しい質問をしていますが、私はこの質問を完成したものとしてマークし、それが元の質問を満たしていれば答えることをお勧めします。コメントについては、次のリンクを参照するか、新しい質問を作成してください。http://stackoverflow.com/questions/12736509/how-to-delete-a-line-of-a-text-file-given-the-line-number -using-batch-bat-sc – Dunny

0

ドラッグを助け

findstr /? 

ホープ新しいCMDと入力を開口部を推薦すると、このバッチファイルにフォルダをドロップします。

@Echo Off 
Set "SrcDir=%~1" 
If Not Defined SrcDir Set "SrcDir=%CD%" 
(For /F EOL^=^ Delims^=^^ %%A In ('Dir/A-D "%SrcDir%"') Do Echo=%%A)>output.txt 

それはそのフォルダに出力output.txtとファイルをする必要があります。 (入力フォルダが指定されていない場合は、現在のディレクトリにoutput.txtを提供する必要があります)

あなただけのファイルからデータを解析するために欠けている場合、このようにそれを適応させる:あなたのファイルパスと

@Echo Off 
Set "SrcFile=%~1" 
If Not Defined SrcFile Exit/B 
(For /F UseBackQEOL^=^ Delims^=^^ %%A In ("%SrcFile%") Do Echo=%%A)>output.txt 

ジャストドラッグ/交換し、その上にファイルをドロップするか、それを適応させる%〜1/2行目の名前。

+2

は動作していません。 私はドラッグアンドドロップする必要はありません。これは.batファイルの一部である必要があります。 – Denis

+0

これは入力パラメータをファイルの内容に簡単に適合させることができますが、出力ファイルはdirコマンドの結果です。そのdirコマンドは私が投稿したものに置き換えてください。 _(それはうまくいく、私は他のものよりも頻繁に同じ機能を使用する)_。 – Compo

5
findstr /r /c:"^[0-9]" yourfile.txt > targetfile.txt 

数字で始まるこの取得ラインそれはあなたの質問に必要なものですから。

+4

ビンゴ!これは最も簡単で最速のソリューションです。一時ファイルを必要とせずにDIRコマンドの出力を直接処理することができます: 'dir/a-d | findstr "^ [0-9]"> targefile.txt' – dbenham

関連する問題