使用 Powershell 的二级目录列表
Two level directory listing with Powershell
我一直在尝试获得一个非常具体的目录列表,但到目前为止没有成功。
假设我有这样的文件夹结构:
- C:\inetpub\updates\updatefolder1
- C:\inetpub\updates\updatefolder1\Web\
- C:\inetpub\updates\updatefolder1\Web\(站点代码,结构继续)
- C:\inetpub\updates\updatefolder1\Scripts\(数据库脚本)
- C:\inetpub\updates\updatefolder2
- C:\inetpub\updates\updatefolder2\Web\(站点代码,结构继续)
现在,当我使用 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
我一直在尝试获得一个非常具体的目录列表,但到目前为止没有成功。
假设我有这样的文件夹结构:
- C:\inetpub\updates\updatefolder1
- C:\inetpub\updates\updatefolder1\Web\
- C:\inetpub\updates\updatefolder1\Web\(站点代码,结构继续)
- C:\inetpub\updates\updatefolder1\Scripts\(数据库脚本)
- C:\inetpub\updates\updatefolder2
- C:\inetpub\updates\updatefolder2\Web\(站点代码,结构继续)
现在,当我使用 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