标题: [原创教程] PowerShell 技能连载 - 指定递归深度 [打印本页]
作者: victorwoo 时间: 2014-7-28 08:18 标题: PowerShell 技能连载 - 指定递归深度
原始链接:PowerShell 技能连载 - 指定递归深度
发表日期:2014-07-25
适用于 PowerShell 3.0 及更高版本
当使用 `Get-ChildItem` 来列出文件夹内容时,可以用 `-Recurse` 参数来对子目录进行递归。然而,这导致无法控制递归深度。`Get-ChildItem` 会在所有子目录中搜索,无限地递归下去。- Get-ChildItem -Path $env:windir -Filter *.log -Recurse -ErrorAction SilentlyContinue
复制代码
有些时候,我们会见到一种类似这样的方法,来试图控制递归的深度:- Get-ChildItem -Path $env:windir\[i]\[/i]\[i] -Filter [/i].log -ErrorAction SilentlyContinue
复制代码
然而,这并不能限制只递归 3 层。实际上,它的作用是搜索 3 层及 3 层以上的文件夹。它不会搜索 1 层或 2 层的文件夹。
限制递归深度的唯一办法是自己实现递归算法:- function Get-MyChildItem
- {
- param
- (
- [Parameter(Mandatory = $true)]
- $Path,
-
- $Filter = '*',
-
- [System.Int32]
- $MaxDepth = 3,
-
- [System.Int32]
- $Depth = 0
- )
-
- $Depth++
-
- Get-ChildItem -Path $Path -Filter $Filter -File
-
- if ($Depth -le $MaxDepth)
- {
- Get-ChildItem -Path $Path -Directory |
- ForEach-Object { Get-MyChildItem -Path $_.FullName -Filter $Filter -Depth $Depth -MaxDepth $MaxDepth}
- }
-
- }
-
- Get-MyChildItem -Path c:\windows -Filter [i].log -MaxDepth 2 -ErrorAction SilentlyContinue [/i]
- Select-Object -ExpandProperty FullName
复制代码
这段代码将获取您 Windows 文件夹中深度在 2 层以内的 \*.log 文件。
本文国际来源:Recursing a Given Depth
作者: CrLf 时间: 2014-8-7 22:46
原文的 * 变成 [i] 了...
作者: PakTC 时间: 2014-8-8 00:28
[i=s] 本帖最后由 PakTC 于 2014-8-8 00:36 编辑 [/i]
[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=152035&ptid=31171]2#[/url] [i]CrLf[/i] [/b]
看起来是某种格式设置,比如“斜体”,[i]和[/i]成对出现的
作者: victorwoo 时间: 2014-8-8 13:51
回复 2# CrLf
就是希望它为斜体。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |