找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23222|回复: 3

[原创教程] PowerShell 技能连载 - 指定递归深度

[复制链接]
发表于 2014-7-28 08:18:03 | 显示全部楼层 |阅读模式
原始链接:PowerShell 技能连载 - 指定递归深度
发表日期:2014-07-25


适用于 PowerShell 3.0 及更高版本

当使用 `Get-ChildItem` 来列出文件夹内容时,可以用 `-Recurse` 参数来对子目录进行递归。然而,这导致无法控制递归深度。`Get-ChildItem` 会在所有子目录中搜索,无限地递归下去。

  1. Get-ChildItem -Path $env:windir -Filter *.log -Recurse -ErrorAction SilentlyContinue
复制代码
有些时候,我们会见到一种类似这样的方法,来试图控制递归的深度:

  1. Get-ChildItem -Path $env:windir\[i]\[/i]\[i] -Filter [/i].log -ErrorAction SilentlyContinue
复制代码
然而,这并不能限制只递归 3 层。实际上,它的作用是搜索 3 层及 3 层以上的文件夹。它不会搜索 1 层或 2 层的文件夹。

限制递归深度的唯一办法是自己实现递归算法:

  1. function Get-MyChildItem
  2. {
  3.   param
  4.   (
  5.     [Parameter(Mandatory = $true)]
  6.     $Path,

  7.     $Filter = '*',

  8.     [System.Int32]
  9.     $MaxDepth = 3,

  10.     [System.Int32]
  11.     $Depth = 0
  12.   )

  13.   $Depth++

  14.   Get-ChildItem -Path $Path -Filter $Filter -File

  15.   if ($Depth -le $MaxDepth)
  16.   {
  17.     Get-ChildItem -Path $Path -Directory |
  18.       ForEach-Object { Get-MyChildItem -Path $_.FullName -Filter $Filter -Depth $Depth -MaxDepth $MaxDepth}
  19.   }

  20. }

  21. Get-MyChildItem -Path c:\windows -Filter [i].log -MaxDepth 2 -ErrorAction SilentlyContinue [/i]
  22.   Select-Object -ExpandProperty FullName
复制代码
这段代码将获取您 Windows 文件夹中深度在 2 层以内的 \*.log 文件。


本文国际来源:Recursing a Given Depth
发表于 2014-8-7 22:46:41 | 显示全部楼层
原文的 * 变成 [i] 了...
发表于 2014-8-8 00:28:36 | 显示全部楼层
[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]成对出现的
 楼主| 发表于 2014-8-8 13:51:44 | 显示全部楼层
回复 2# CrLf


    就是希望它为斜体。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 23:15 , Processed in 0.017613 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表