2017-03-11 6 views
0

フォルダに含まれるcsvファイルの数に基づいて配列を作成しようとしています。ここまでは私のコードです:配列の要素の種類は要素の数によって異なります

CD "\\domain\folder\file drop location" 
$Array = Get-ChildItem -Filter *.csv | 
     Where-Object {-not $_.PsIsContainer} | 
     Foreach-Object {$_.Name} 
$Array[0] 

これは、フォルダ内の.csvファイルの数によって異なる値を返します。 1つだけのcsvが存在する場合、$Array[0]はファイル名の最初の文字を返します(私はこれを望みません)。複数のcsvファイルがある場合は、ファイル名全体を返します(これは必要です)。どのようにして、1つのファイルを1要素の配列として受け取るようにするのですか?あなたはPowerShellを理解していないアマチュア/学習者がどのようにフレーズ質問をするのか分からないことを考慮していない限り

EDIT は、この質問は、重複とみなすことができます。問題の私の解釈は私にではなく、他の問題に答えた数十ページにつながった。

+1

'$配列[0] ' - >' @($配列)[0 ]または '$ Array = ...' - > '$ Array = @(...)' –

+0

これを答えにして、それをマークします –

+1

または '[array] $ Array =' – TheMadTechnician

答えて

2

変数を作成するときに配列としてキャストできます。結果が1つのみの場合でも、配列は常に配列になります。 @(, (command))

$Array = @(, (Get-ChildItem -Filter *.csv | 
     Where-Object {-not $_.PsIsContainer} | 
     Foreach-Object {$_.Name})) 

結果タイプとしてアレイに

[array]$Array = Get-ChildItem -Filter *.csv | 
     Where-Object {-not $_.PsIsContainer} | 
     Foreach-Object {$_.Name} 
+0

これらすべての答えはうまくいくようですが、 –

2

フォース結果タイプは全く.csvファイルが見つからない場合でも、アレイであろう(しかし$Array.Countであろう0ので$Array[0]は、エラーが発生します)。

, (command)なし.csvファイルは、次に$Array.Count 1及び$Array[0]であろう見出される配列に結果のタイプを強制する$nulあろう:

$Array = , (Get-ChildItem -Filter *.csv | 
     Where-Object {-not $_.PsIsContainer} | 
     Foreach-Object {$_.Name}) 
+0

なぜ '@()'の中で余分な '、()'を使うのですか? – PetSerAl

+0

@PetSerAl申し訳ありませんが、先行するカンマの推奨事項をどこで見たのか思い出せません。(その時点でいいアイデアだったようです。 – JosefZ

関連する問題