2

パイプ文字区切り記号を使用して、ディレクトリからすべての .CSV ファイルを取得してインポートするコードがあります。

$apeasy = dir .\APEasy\*.csv | Import-CSV -delimiter '|'

問題は、これが null を返すことです。何をやっても例外なく。奇妙なことは、これが機能することです:

dir .\APEasy\*.csv

これは、インポートするファイルとして Import-CSV にパイプする必要がある FileInfo オブジェクトを返します。さらに、次の 2 つのコマンドが機能します。

$csvFiles = dir .\Processed_Data_Review -Filter *.txt | Import-CSV -header(1..19) -delimiter "$([char]0x7C)"
dir .\LIMS -Filter *.csv | Import-CSV | ? {$_.SampleName -like "????-*"}| Export-CSV -Path .\lims_output.txt -NoTypeInformation

ここで何が起こっているのか本当にわかりません。私は基本的なパイプ区切りのファイル、すべてのフィールドを引用符で囲んでいます (これで問題ありません。それらを使用してデータをインポートできます)。ここでは特別なことは何も起こっていません。ファイルはありますが、Import-CSV は何らかの理由でそれを取得していません。

だから私の質問はこれです:「dir」によって取得されたファイルが Import-CSV にパイプされない原因は何ですか?

編集:これの全体的な目標は、事前に名前を知らなくてもディレクトリ内の CSV ファイルを読み取り、特定の列をさまざまな出力ファイルに出力することです。

編集:これは現在のコード行です:

$apeasy = Get-ChildItem .\APEasy\*.csv | Select-Object -ExpandProperty FullName | Import-CSV -delimiter "$([char]0x7C)"

Get-ChildItem ステートメントを分離し、Get-Child と Select-Object を分離すると、どちらも必要なものが返されます。ディレクトリ内の csv ファイルのリストと、それぞれのフル パスの配列。それでも、Import-CSV にパイプされると、それらは消えます。変数の Get-Member は、それが空であることを返します。

4

3 に答える 3

1

Import-Csv はパイプラインから文字列 (パス) のみを受け入れるため、パイプラインに直接パイプするには、最初にパスを展開する必要があります。

dir .\APEasy\*.csv | 
select -expand fullname |
Import-CSV -delimiter '|'
于 2013-08-15T14:54:53.987 に答える
1

コマンドレットは、プロパティ名 (および意味のある値) によってパラメーターGet-Contentを受け入れることができるという点でそのように機能しますが、少し一貫性がありません。値でインポートするパスのみを受け入れます。PathLiteralPathImport-Csv

-Path <String[]>
    Specifies the path to the CSV file to import. You can also pipe a path to Import-Csv.

    Required?                    false
    Position?                    1
    Default value                None
    Accept pipeline input?       true (ByValue)
    Accept wildcard characters?  false

だからあなたは使うことができます

Get-ChildItem ... | Select-Object -ExpandProperty FullName | Import-Csv

ただし、パイプラインから直接は機能しません。

于 2013-08-15T14:56:10.937 に答える