特定のディレクトリ内のすべてのフォルダーの名前を取得し、それぞれを配列のエントリとして返すスクリプトを記述しようとしています。ここから、各配列要素を使用して、後の関数呼び出しのパラメーターとして各要素を使用するより大きなループを実行します。これらはすべてPowerShellを介して行われます。
現在、私はこのコードを持っています:
function Get-Directorys
{
$path = gci \\QNAP\wpbackup\
foreach ($item.name in $path)
{
$a = $item.name
}
}
$path
行は正しく、すべてのディレクトリを取得しますが、foreachループは、各要素の各ディレクトリのフルネームではなく、最初のディレクトリの個々の文字を実際に格納する問題です。
パイプラインを使用する別のオプションを次に示します。
$arr = Get-ChildItem \\QNAP\wpbackup |
Where-Object {$_.PSIsContainer} |
Foreach-Object {$_.Name}
完全性と読みやすさのために:
これにより、「F」で始まる「somefolder」内のすべてのファイルが配列に取得されます。
$FileNames = Get-ChildItem -Path '.\somefolder\' -Name 'F*' -File
これは、現在のディレクトリのすべてのディレクトリを取得します。
$FileNames = Get-ChildItem -Path '.\' -Directory
$ array =(dir * .txt).FullName
$ arrayは、ディレクトリ内のすべてのテキストファイルのパスのリストになりました。
# 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
}
}
私の問題は、あなたのforeach
ループ変数が$item.name
であると信じています。必要なのは、$item
という名前のループ変数で、それぞれのname
プロパティにアクセスします。
つまり、
foreach ($item in $path)
{
$item.name
}
また、$item.name
の割り当てを解除したことにも注意してください。 Powershellでは、結果が変数に格納されていない、別のコマンドにパイプされている、またはキャプチャされていない場合、結果は関数の戻り値に含まれます。