web-dev-qa-db-ja.com

アレイPowershellへのディレクトリフォルダー名の保存

特定のディレクトリ内のすべてのフォルダーの名前を取得し、それぞれを配列のエントリとして返すスクリプトを記述しようとしています。ここから、各配列要素を使用して、後の関数呼び出しのパラメーターとして各要素を使用するより大きなループを実行します。これらはすべてPowerShellを介して行われます。

現在、私はこのコードを持っています:

function Get-Directorys
{
    $path = gci \\QNAP\wpbackup\

    foreach ($item.name in $path)
    {
        $a = $item.name
    }
}   

$path行は正しく、すべてのディレクトリを取得しますが、foreachループは、各要素の各ディレクトリのフルネームではなく、最初のディレクトリの個々の文字を実際に格納する問題です。

14
Jingles177

パイプラインを使用する別のオプションを次に示します。

$arr = Get-ChildItem \\QNAP\wpbackup | 
       Where-Object {$_.PSIsContainer} | 
       Foreach-Object {$_.Name}
23
Shay Levy

完全性と読みやすさのために:

これにより、「F」で始まる「somefolder」内のすべてのファイルが配列に取得されます。

$FileNames = Get-ChildItem -Path '.\somefolder\' -Name 'F*' -File

これは、現在のディレクトリのすべてのディレクトリを取得します。

$FileNames = Get-ChildItem -Path '.\' -Directory
5
Gomibushi

$ array =(dir * .txt).FullName

$ arrayは、ディレクトリ内のすべてのテキストファイルのパスのリストになりました。

4
user1949917
# initialize the items variable with the
# contents of a directory

$items = Get-ChildItem -Path "c:\temp"

# enumerate the items array
foreach ($item in $items)
{
      # if the item is a directory, then process it.
      if ($item.Attributes -eq "Directory")
      {
            Write-Host $item.Name//displaying

            $array=$item.Name//storing in array

      }
}
4
parvez rafi

私の問題は、あなたのforeachループ変数が$item.nameであると信じています。必要なのは、$itemという名前のループ変数で、それぞれのnameプロパティにアクセスします。

つまり、

foreach ($item in $path)
{
    $item.name
}

また、$item.nameの割り当てを解除したことにも注意してください。 Powershellでは、結果が変数に格納されていない、別のコマンドにパイプされている、またはキャプチャされていない場合、結果は関数の戻り値に含まれます。

2
jpmc26