2016-10-12 20 views
-1

私はいくつかの助けと指導が必要です。 フォルダ内にcsvファイルを探すスクリプトがあります。ファイルのファイル名とヘッダーを出力ファイルに取得します。csvファイルのヘッダーを抽出するバットファイル

スクリプトは機能しますが、ヘッダーは出力ファイルの行の最後で切り詰められています。ヘッダー全体を出力ファイルにパイプするにはどうすればよいですか?

@ECHO OFF &SETLOCAL 
for %%a in (*.csv) do (
set "line=" 
set /p "line="<"%%~a" 
SETLOCAL ENABLEDELAYEDEXPANSION 
echo %%a %line%":">>output.txt 
echo(!line!>> output.txt 
endlocal 
) 
+0

私は本当にあなたの問題を抱えていません...私はコードで作業してみるといいですね。 「ヘッダーがラインの最後でチョップされている」とはどういう意味ですか?例を表示できます –

+0

'echo %% a%line%' - > 'echo %% a!line! ' – aschipfl

+0

' setlocal'がループの中にあるのはなぜですか? –

答えて

2

csvヘッダーの長さによって異なります。

コードでは、リダイレクトされた入力とset /pを使用してヘッダーを読み取ります。この方法では最大1022文字の入力が可能です。

for /fを使用してファイルを読み取ることもできますが、最大コマンド行の長さ(この場合は8192文字)に制限されています。

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    (for /f "tokens=1,2,* delims=:" %%a in (' 
     findstr /n "^" *.csv ^| findstr /b "[^:]*:1:" 
    ') do (
     echo(%%a: 
     echo( %%c 
    )) > output.txt 

このコードは、単に各ファイルの最初の行のみを取得findstrコマンド、数に入れるの出力線とし、この出力から入力ファイルを読み込みます。 for /fは、コロンを使用して行を分割し、行内の最初の3つのトークン(ファイル名、行番号、行の内容)を取得します。

が指摘したように、コメント

に適応するを編集し、そこには限界があると、実際のデータは、それに衝突しました。

私は防弾純粋なバッチソリューションが表示されませんが、ハイブリッドファイルは問題.cmdまたは.batとして保存

@if (@[email protected]) @then 
@echo off 
    setlocal enableextensions disabledelayedexpansion 

    call :getBatchFileReference _f0 

    (
     for %%a in (*.csv) do (
      echo %%a 
      <"%%a" cscript //nologo //e:Jscript "%_f0%" 
     ) 
    ) > output.txt 

    goto :eof 

:getBatchFileReference returnVar 
    set "%~1=%~f0" 
    goto :eof 

@end 
    WScript.StdOut.WriteLine(WScript.StdIn.ReadLine()); 

を扱うことができ、ファイルは、バッチコードとで最終ゾーンとの最初のゾーンが含まれていますJavaScriptコード。

ファイルごとに、バッチ部分は入力としてjavascript部分にリダイレクトされ、最初の行を読み込んで出力します。

+0

はい、あなたは正しいです、csvファイルのヘッダーは非常に長いです!私はあなたのスクリプトを試してみます – user396123

+0

findstrは、行が長すぎることを返しました! – user396123

+0

@ user396123、大きなファイル!それは可能性でした、答えは更新されました。 –

関連する問題