2017-11-16 7 views
1

私は、指定されたディレクトリ内のフォルダの名前に基づいてArrayListを生成するpowershellスクリプトを持っています。だから、ディレクトリには、次のように見えた場合:Powershell ArrayListは、1つの配列アイテムを文字列に戻します。

C:\ディレクトリ\一つ

C:\ディレクトリ\二

C:\ディレクトリ\三

$リストを含む配列です[一二三]。行は次のようになります。

[System.Collections.ArrayList]$list = (Get-ChildItem C:\Directory -dir).Name 

次に、文字列の配列を繰り返し処理し、さまざまな処理を行うことができます。ただし、ディレクトリ内にフォルダが1つしかない場合は、これが機能しなくなります。それはもはやArrayListではなく、単に文字列になるようです。次のエラーが表示されます。

Cannot convert the "Directory" value of type "System.String" to type "System.Collections.ArrayList" 

ここでは何ができますか?私は別の種類の配列型を使うべきですか?

+0

なぜ、最初の場所で 'ArrayList'を使用しているのですか? –

+0

@DanielMann彼は超高速であることを知っているので、彼はArrayListを気にしています! :P –

答えて

4

出力を強制的に配列に配置する必要があります。

@((Get-ChildItem C:\Directory -dir).Name)

+0

これは私のために働いた、ありがとう – Guitrum

0

には、ArrayListを使用したい場合は、コンストラクタは単なる配列または別のArrayListを期待しています。あなたは@DanielMannが言っオフに構築し、このような何かを行うことができます。あなたが見ることができるように

New-Item -Path C:\TestDirectory\SubDirectory -Force | Out-Null # Creates one folder in C:\TestDirectory 
[System.Collections.ArrayList] $ArrayList = @((Get-ChildItem C:\TestDirectory -Directory).Name) 
Write-Host "Total directories: $($ArrayList.Count)" 
Remove-Item -Path C:\TestDirectory -Recurse 

、私はちょうど配列@()(Get-ChildItem).Nameの出力をラップしています。

関連する問題