使用 Powershell 的二级目录列表

Two level directory listing with Powershell

我一直在尝试获得一个非常具体的目录列表,但到目前为止没有成功。

假设我有这样的文件夹结构:

现在,当我使用 foreach 时,它看起来像这样:

$folders = Get-ChildItem $UpdateDir -Directory -Recurse -Depth 1 | Select-Object FullName

ForEach($folder in $folders) {
   $folder = folder.TrimStart("@{FullName=").TrimEnd("}") #To get a clean name
}

结果如下:

C:\inetpub\updates\updatefolder1
C:\inetpub\updates\updatefolder2
C:\inetpub\updates\updatefolder1\Web\
C:\inetpub\updates\updatefolder1\Web\ (site code, the structure goes on)
C:\inetpub\updates\updatefolder1\Scripts\ (db scripts)
C:\inetpub\updates\updatefolder2\Web\ (site code, the structure goes on)

这是不对的。 它应该是这样的:

C:\inetpub\updates\updatefolder1
C:\inetpub\updates\updatefolder1\Web\
C:\inetpub\updates\updatefolder1\Web\ (site code, the structure goes on)
C:\inetpub\updates\updatefolder1\Scripts\ (db scripts)
C:\inetpub\updates\updatefolder2
C:\inetpub\updates\updatefolder2\Web\ (site code, the structure goes on)

有什么新鲜的想法吗?除了那个 foreach 循环,我已经尝试了几种方法,仍然没有成功。

提前致谢。

不需要 ForEach 循环,它可以用 select 对象中的 -expandproperty 代替。如果我正确理解了这个问题,那么您提出的问题是结果未排序。答案是使用 `Sort-Object'

对结果进行排序

示例

$folders = Get-ChildItem $UpdateDir -Directory -Recurse -Depth 1 | 
     Select-Object -ExpandProperty fullname | 
     Sort-Object
$folders