16

我正在尝试编写一个脚本,该脚本将获取特定目录中所有文件夹的名称,然后将每个文件夹作为数组中的一个条目返回。从这里开始,我将使用每个数组元素来运行一个更大的循环,该循环将每个元素用作稍后函数调用的参数。所有这些都是通过 powershell 完成的。

目前我有这个代码:

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

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

$path行是正确的,并且为我提供了所有目录,但是 foreach 循环是它实际存储第一个目录的各个字符而不是每个目录的每个元素的全名的问题。

4

5 回答 5

39

这是使用管道的另一个选项:

$arr = Get-ChildItem \\QNAP\wpbackup | 
       Where-Object {$_.PSIsContainer} | 
       Foreach-Object {$_.Name}
于 2012-12-22T08:59:28.040 回答
8

$array = (dir *.txt).FullName

$array 现在是目录中所有文本文件的路径列表。

于 2013-05-31T22:53:11.227 回答
6

为了完整性和可读性:

这会将“somefolder”中以“F”开头的所有文件放到一个数组中。

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

这将获取当前目录的所有目录:

$FileNames = Get-ChildItem -Path '.\' -Directory
于 2014-09-05T11:03:38.443 回答
6
# 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

      }
}
于 2017-03-26T20:38:22.377 回答
2

我相信问题在于您的foreach循环变量是$item.name. 您想要的是一个名为 的循环变量$item,您将访问name每个变量的属性。

IE,

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

另请注意,我没有$item.name分配。在 Powershell 中,如果结果未存储在变量中、未通过管道传输到另一个命令或以其他方式捕获,则它包含在函数的返回值中。

于 2012-12-22T00:07:53.277 回答