在 Powershell 中列出给定深度或以下的文件夹

2024-02-12

我有一个包含很多文件夹的目录。我想列出所有深度超过 2 层的文件夹(路径)。因此,在下面的情况下文件夹 1 和 2。

Directory/folder1
Directory/folder1/test1/test/testsub
Directory/folder1/test2
Directory/folder1/test3
Directory/folder2/blablabla/bla/1
Directory/folder3/test
Directory/folder4/test
Directory/folder5/test

我正在尝试以下操作:

$Depth = 3
$Path = "."

$Levels = "\*" * $Depth
$Folder = Get-Item $Path
$FolderFullName = $Folder.FullName
Resolve-Path $FolderFullName$Levels | Get-Item | ? {$_.PsIsContainer} | Write-Host

下面的解决方案是您自己构建的,假设您的意图是查找子树超过给定深度的子目录.

如果您想查找给定深度的所有目录路径或更深入,请参阅底部部分。
您的方法无法实现这一点,因为它只查找给定深度的目录,而不是下面的目录。


您自己的基于通配符的巧妙方法原则上应该有效,但是:

  • (a) 可以大大简化。

  • (b) 需要进行额外的工作来将输出限制为子树太深的子文件夹的不同列表。

(a) 简化您的方法:

$Depth = 3
$Path = '.'

$Levels = '/*' * $Depth
Get-ChildItem -Directory $Path/$Levels
  • 就像你自己的方法一样,'/*' * $Depth动态创建多目录级通配符表达式(例如,/*/* for a $Depth of 2) 可以附加到输入$Path仅匹配该级别的路径。

  • The -Directory开关 (PSv3+) 仅限制匹配目录。

(b) 将输出限制为具有太深子树的不同顶级文件夹集:

$Depth = 3
$Path = '.'

$Levels = '/*' * $Depth
Get-ChildItem -Directory $Path/$Levels |
  ForEach-Object { ($_.FullName -split '[\\/]')[-$Depth] } |
    Select-Object -Unique

Note: Splitting by [/\\] - that is, by either / or \ - makes the solution work on Unix-like platforms too (PowerShell Core); on Windows, -split '\\' (by an escaped \) is sufficient.

使用您的示例文件夹层次结构,上面的内容将产生:

folder1
folder2
  • 如果你想要完整路径相反,附加
    | Convert-Path -LiteralPath { "$Path/$_" }.

  • 如果你想目录信息对象 ([System.IO.DirectoryInfo]) 相反,附加
    | Get-Item -LiteralPath { "$Path/$_" }.


可选阅读:使文件夹达到、达到或超过一定深度:

Note:

  • 即使低于目标的解决方案folders(目录),您可以包括files也可以简单地省略-Directory,或仅通过替换目标文件-Directory with -File.

  • 为简单起见,这些命令隐式定位当前目录。


At-a-仅给定深度 logic:

这与上述解决方案中采用的逻辑相同;以下代码列出了深度为 2 的文件夹only,即那些位于孙级的目录(子目录的子目录) - 请注意,与Get-ChildItem -Depth,深度计数开始于1, i.e. 1指子目录:

$depth = 2 # grandchild directories only

Get-ChildItem -Directory -Path ('*/' * $depth)
  • 输出完整路径,将Get-ChildItem命令输入(...).FullName或通过管道将其传输到Select-Object -ExpandProperty FullName.

  • 输出相对路径 (e.g., folder1/test1/test/testsub),需要额外的工作,因为添加-Name will not在这种情况下按预期工作(它将仅输出目录names):

$depth = 2 # grandchild directories

# Calculate the length of the path prefix for determining relative paths.
# (Using the current dir ($PWD) as the reference path here.)
$PrefixLen = (Convert-Path -LiteralPath $PWD).Length + 1

$Levels = '/*' * $Depth
Get-ChildItem -Directory -Path ('*/' * $depth) |
  ForEach-Object { $_.FullName.Substring($PrefixLen) }

Up-to-给定深度逻辑:

The PSv5+ -Depth范围limits Get-ChildItem的递归深度,即,它只查找达到指定深度的项目,但请注意,它是depth 0, not 1代表的是直系子女.
请注意,使用-Depth implies -Recurse,尽管您也可以指定后者。

例如,要枚举当前目录中的子文件夹和孙文件夹(2 级),请使用:

$depth = 2 # child and grandchild directories

Get-ChildItem -Directory -Depth ($depth - 1)
  • 输出完整路径,将Get-ChildItem命令输入(...).FullName或通过管道将其传输到Select-Object -ExpandProperty FullName.

  • 输出相对路径,只需添加-Name切换到Get-ChildItem call.

At-a-给定深度或更深 logic:

将结果限制为级别大于或等于给定深度的项目需要自定义解决方案:

$depth = 2 # grandchild directories and below

Get-ChildItem -Directory -Name -Recurse |
  Where-Object { ($_ -split '[/\\]').Count -ge 2 } |
    Get-Item -LiteralPath { "$PWD/$_" }

If your input path isn't the (implied) current dir., substitute that path for $PWD.

  • 输出完整路径, 代替Get-Item with Convert-Path.

  • 输出相对路径,只需省略Get-Item call.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Powershell 中列出给定深度或以下的文件夹 的相关文章

  • 将 .cer 格式的证书添加到 .bks 密钥库中

    我需要将 cer 格式的证书添加到 BKS 密钥存储中 SO 上对此进行了描述 如何将 cer 转换为 BKS https stackoverflow com questions 21284466 how to convert cer to
  • 在 PowerShell 中通过 UDP 发送和接收数据

    我正在尝试编写一个脚本来使用 PowerShell 进行测试和应用 测试应包括通过 UDP 向远程服务器发送字符串 然后读取该服务器的响应并对结果执行某些操作 我需要的唯一帮助是脚本的中间两个步骤 发送字符串 然后 接收响应 在端口 UDP
  • Powershell send-mailmessage - 向多个收件人发送电子邮件

    我有这个 powershell 脚本来发送带有附件的电子邮件 但是当我添加多个收件人时 只有第一个收件人收到消息 我已经阅读了文档 但仍然无法弄清楚 谢谢 recipients Marcel lt email protected cdn c
  • Azure DevOps 通过 REST API 获取链接到工作项的提交

    有没有办法获取链接到仅给定工作项 ID 的工作项的 Git 提交 我正在使用 PowerShell 和this https learn microsoft com en us rest api azure devops wit work 2
  • 为什么powershell会收集未捕获的值并将其作为数组返回

    尽管我认为以下代码应该返回单个值 但它返回一个数组 function Do Something 123 return 456 Do Something GetType will say Object 我了解到 如果我想避免这种情况 我必须将
  • 跳转到脚本中的某些位置

    有没有办法让脚本跳转到命令提示符中的特定位置 例如 GOTO 我想让脚本结束时跳到开头 tag1 Read Host Enter tag cls sc exe tag1 start RemoteRegistry cls Start Slee
  • Powershell Get-ChildItem 输出延迟? [复制]

    这个问题在这里已经有答案了 Powershell 版本信息如下 Name Value PSVersion 5 0 10586 494 PSCompatibleVersions 1 0 2 0 3 0 4 0 BuildVersion 10
  • 使用 PHP 简单 DOM 解析器的递归

    由于某种原因 我在使用简单 DOM 解析器库时遇到了递归 我的 HTML 是这样的 div div class some div some text div div class field 1 misc1 a href Some text
  • 如何自动执行/安排 IIS 中托管的 WCF 服务调用?

    我有一个非常简单的服务合同 用于管理自己的数据导入 类似于 using System ServiceModel namespace Company Services Domain Contract ServiceContract Name
  • 使用 Powershell 从 JSON 获取值

    非常初学者的问题 我正在尝试使用 Powershell 从 JSON 获取某些值 具体来说 我想列出服务 测试00000 and FAKE only 当我运行下面的脚本时 我得到 TEST00000 FAKE Enabled True Pr
  • 从所有通讯组中删除所有前雇员

    因此 今天我被分配的任务是从所有 DL 中删除域中的所有前员工 他们在 AD 中拥有自己的文件夹 有没有什么方法可以快速做到这一点 或者至少比单独检查每个并转到 gt 的成员删除所有更快 Thanks 编辑以添加更多信息 有 822 个用户
  • 在Python中获取目录基名的优雅方法?

    我有几个脚本将目录名称作为输入 并且我的程序在这些目录中创建文件 有时我想获取给程序的目录的基本名称 并用它在目录中创建各种文件 例如 directory name given by user via command line output
  • Jenkins 中的 Powershell 转义路径字符

    我有一个声明性管道 应该执行 powershell 步骤来安装路径 路径作为参数提供 parameters string name UNC defaultValue server01 lab local shared data descri
  • “foop”:命名约定?它是“foo”的辅助递归函数;后缀“p”是什么意思?

    我遇到了以下代码片段 函数定义 choose x xs choosep x xs where choosep x x choosep x x choosep x xs choosep x xs in 柯里编程语言 http en wikip
  • 如何用模板参数包的内容填充数组?

    我嵌套了与 VS 2015 一起使用的部分专用模板代码 直到我发现它不符合标准 https stackoverflow com q 3052579 2747466 我希望如此 所以我扭曲了我的代码来克服前一个问题 并且that one ht
  • Powershell“特殊”开关参数

    我有下面的powershell功能 Function Test Param Parameter string Text default text Write Host Text Text 我希望能够像下面这样调用这个函数 测试 文本 应该在
  • 方案中的尾递归幂函数

    我在方案中编写尾递归幂函数时遇到问题 我想使用辅助函数来编写该函数 我知道我需要一个参数来保存累计值 但在那之后我就陷入了困境 我的代码如下 define pow tr a b define pow tr h result if b 0 r
  • SMART 硬盘信息 Powershell [重复]

    这个问题在这里已经有答案了 我正在寻找一种通过可能的 powershell 来获取任何给定设备上硬盘驱动器的 SMART 数据的方法 我已经通过 CMD 和 powershell 尝试过 WMI 命令 但无法获得我正在寻找的适当数据 获取
  • 如何使用收益返回和递归获得字母的每个组合?

    我有几个像这样的字符串列表 可能有几十个列表 1 A B C 2 1 2 3 3 D E F 这三个仅作为示例 用户可以从几十个具有不同数量元素的类似列表中进行选择 再举个例子 这对于用户来说也是一个完全有效的选择 25 empty 4 1
  • 在结果中只显示一列?

    这是一个简单的问题 但如何在下面的代码中选择特定的列 我只想显示 时间 列 而不显示其他任何内容 我尝试输入 FORMAT TABLE TIME 但它只是多次填充 TIME 而没有实际显示时间 server event Get Conten

随机推荐

  • unicode“感知”std::getline

    好吧 我正在测试如何编写一个 C 应用程序 该应用程序实际上可以读取 和更改 文本文件 同时尊重文本使用的编码 我希望 对于其他 API 将所有读取的文本显式转换为 UTF 8 以供内部使用 与文件中的实际编码无关 我在 Windows 上
  • .net 本地程序集加载因 CAS 策略失败

    我们收到以下程序集加载错误 该程序集是从本地路径 C Program Files ASWorx Products ASWorx Bin 加载的 旧版本的二进制文件不存在问题 当我们通过电子邮件发送新的二进制文件时 就会出现此问题 构建设置未
  • Alpha 通道(PNG) 和 Golang 的问题

    我在 golang 中的图像遇到一个简单的问题 我正在用颜色绘制 png 图像 但结果不是我想要的 在 Alpha 值最低的像素中 绘制另一种颜色 我正在使用 alphaChannel false return new image with
  • Android 12 kiosk 模式 - 屏幕超时后 NFC 停止工作

    我有一些使用 Android Management API 并在 kiosk 模式下运行的设备 从 Android 10 gt Android 12 升级后 我遇到了有关 NFC 扫描的新问题 设备重新启动后 一切似乎工作正常 如果我通过按
  • Javascript:将 HTML 中的行动态添加到 IE 中的表格时出现问题

    我查看了其他一些问题 例如this one https stackoverflow com questions 812693 cant dynamically add rows to a table in ie但他们没有解决这个特定问题 当
  • Erlang/OTP 架构:SOAish 服务的 RESTful 协议

    让我们想象一下 我们有一个为披萨店设计和构建的订单处理系统 要求是 R1 系统应该与客户端和用例无关 这意味着系统可以由初始设计期间未考虑到的客户端访问 例如 如果披萨店决定其许多顾客稍后使用三星 Bada 智能手机 那么为 Bada OS
  • 更改纯 ruby​​ 中的时区(不是 Rails)

    我正在构建一个 Sinatra 站点 该站点具有混合 UTC PST 数据源 但将在 PST 中查看 所以我需要一种方法来轻松地将 Time 对象从 UTC 转换为 PST 没有 Rails 我无法访问Time zone in time z
  • 如何将值插入到MYSQL中的自动标识列中[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想将值插入 mysql innod
  • Firebase 功能会话 Cookie 未在子域上定义

    我尝试让 Firebase 会话 Cookie 工作以在所有子域中保留一个身份验证 现在我有了子域名accounts mysite com我将云功能以及登录表单路由到其中 在那里注册后 我调用我的云功能 app get authentica
  • 使用 gnuplot 绘制轨迹

    我有一个数据文件 其移动点的位置采用以下格式 x1 y1 x2 y2 x3 y3 我希望在 gnuplot 中使用这些数据制作动画轨迹 我怎样才能做到这一点 我试过 do for i 1 20 plot temp dat every i u
  • Android 如何停止其他Activity中的AlarmManager

    我正在使用一个在 AlarmManager 重复创建的活动 A 中调用的服务 我的服务正在重复检查服务器的响应 当响应为 true 时 新的 Activity B 就会启动 现在 当活动 B 启动时 我想停止服务以及 AlarmManage
  • 实体框架代码优先 - 多对多 - 包括条件

    我有两个实体Store and Catalog 使用流畅的 Api 建立多对多关系 我想通过以下方式获得商店id所有目录的状态都等于 已发布 下面我尝试编写以下查询 但没有得到预期的结果 var store context Stores I
  • Powershell 不允许我打开 firebase CLI

    每次我输入命令 firebase login 时 Powershell 都不会让我打开 firebase 出现了问题 如何打开文件 ihc 以前用 powershell 打开 firebase 从来没有遇到过问题 现在我明白了在此输入图像描
  • clearInterval 在reactjs 中不起作用

    SetInterval 工作正常 但clearInterval 不起作用 查看我的代码 我有父类 Channel 和子类 Body 当调用 componentDidMount 时 在 body 内 然后我为函数刷新状态设置间隔 在刷新状态函
  • 使用管道在 bash 中划分的最佳方法?

    我只是在寻找一种简单的方法来除法 或提供其他数学函数 假设我有以下命令 find name mp4 wc l 如何获取 wc l 的结果并将其除以 3 我见过的例子不涉及重定向出 入 Using bc bc l lt lt lt scale
  • 如何将参数传递给 DbMigration.Sql() 方法

    使用实体框架迁移时 DbMigration基类有一个 Sql 方法 它接受匿名对象中的参数 http msdn microsoft com en us library system data entity migrations dbmigr
  • D3.js:如何在版本 4 中向直方图添加分布线

    Note 这个问题 https stackoverflow com questions 41248649 d3 js how to add distribution curves to histograms in version 4是关于c
  • 如何获取 UICollectionView 标头的索引路径?

    使用视图的indexPathForItemAtPoint 我将获得单元格的索引路径 但永远不会获得UICollectionReusableView 页眉 页脚 因为它总是返回nil override func collectionView
  • 如何在android中以编程方式绘制下面的图像?

    我是安卓新手 我发现使用画布非常困难 如何在android中绘制下面的图像 我还想让选定的字母在触摸时突出显示 这里是
  • 在 Powershell 中列出给定深度或以下的文件夹

    我有一个包含很多文件夹的目录 我想列出所有深度超过 2 层的文件夹 路径 因此 在下面的情况下文件夹 1 和 2 Directory folder1 Directory folder1 test1 test testsub Director