1

まず、私のコーディング能力が乏しいことにお詫び申し上げますが、私は数時間かけてフォーラムを読んで亀裂をつけたので、複数のテキストファイルから特定の行のデータを抽出して1つのCSVファイルに変換する

ファイル名を3行目、5行目、7行目の3つのテキストファイルから1つのCSVにポップします。

filename1, linedata3, linedata5, linedata7 
filename2, linedata3, linedata5, linedata7 
filename3, linedata3, linedata5, linedata7 

Simples、eh?そうではありません。私はあなたのコーディング「スキルズ」に欠けており、あなたの助けを借りて行うことができます。ここで私がこれまで持っているものです。

まずバッチファイル(のgo.bat):

@echo off 
for /f "skip=2 delims=" %%i in (%1) do >>lines.txt echo %~n1 %%i & goto :EOF 

その後、手動コマンドラインエントリ:

go.bat file1.txt 
go.bat file2.txt 
go.bat file3.txt 

だから、あなたが見ることができるように、私がしています1行のテキストに対してこれを行いますが、3行目と5行目を出力の最後に追加する方法はわかりません。また、私が本当に好きなのは適切なコマンドラインのエントリなので、ディレクトリ内のすべてのテキストファイルに対してこれを行うことができます。私は次のことを試しましたが、何かが欠けているようです:

for %i in (*.*) do go.bat "%i" 

ボディーヘルプ?

ありがとうございました! James

答えて

1

別の構成で線を読むことができます。

setlocal EnableDelayedExpansion 
< %1 (
Set /p line1= 

Set /p line2= 
Set /p line3= 
Set /p line4= 
Set /p line5= 
Set /p line6= 
Set /p line7= 
) 
Echo %1,!line3!,!line5!,!line7! 

またはループ(アンドリー・)

Setlocal EnableDelayedExpansion 
<%1 (
    For /L %%n in (1 1 7) do (
    Set /p line%%n= 
) 
) 
Echo %1,!line3!,!line5!,!line7! 
+0

+1ですが、 'FOR/L'ループも同様に機能するのだろうかと思います。 '<%1(FOR/L %% L IN(1,1,7)DO SET/P行%% L =)'のようなものです。基本的にはあなたと同じアイデアですが、似たような行を繰り返すのではなく、ループになるだけです。どう思いますか? –

+0

@Andriyあなたのアイデア(いくつかの行変数でファイルのいくつかの行を読むためにループを使うこと)は、 'set line!i!= %% l'行のもう一つの答え(私の答え)で既に使われていました。 – Aacini

+0

はい、あなたは 'for/L'ループを使用することもできますが、私の意見ではAaciniの – jeb

2
@echo off 
setlocal EnableDelayedExpansion 
if exist result.csv del result.csv 
for %%f in (*.txt) do (
    set i=0 
    for /F "delims=" %%l in (%%f) do (
     set /A i+=1 
     set line!i!=%%l 
    ) 
    echo %%f, !line3!, !line5!, !line7! >> result.csv 
) 

と、このバッチファイルプロセスディレクトリ内のすべての.txtファイル、あなたが言ったように。

+0

+1、それは動作しますが、感嘆符と空白行で失敗し、それを解決することは本当に難しいです – jeb

関連する問題