powershell - 从保留文件夹结构的所有子目录中删除文件,除了一个子目录
问题描述
我正在尝试从所有子目录中删除所有文件,同时保留文件夹的结构,但不包括从每个子目录中删除 2019 年 10 月的文件⇒root_dir\*\2019\October\
目录结构如下所示:
C:\Users\User1\Documents\MyFolder ├───目录1 │ ├───2018 │ │ ├───四月 │ │ │ └───错误 │ │ ├───八月 │ │ │ └───错误 │ │ ├───二月 │ │ │ └───错误 │ │ ├───一月 │ │ │ └───错误 │ │ ├───七月 │ │ │ └───错误 │ │ ├───六月 │ │ │ └───错误 │ │ ├───三月 │ │ │ └───错误 │ │ ├───五月 │ │ │ └───错误 │ │ ├───十月 │ │ │ └───错误 │ │ └───九月 │ │ └───错误 │ └───2019 │ ├───四月 │ │ └───错误 │ ├───八月 │ │ └───错误 │ ├───二月 │ │ └───错误 │ ├───一月 │ │ └───错误 │ ├───七月 │ │ └───错误 │ ├───六月 │ │ └───错误 │ ├───三月 │ │ └───错误 │ ├───五月 │ │ └───错误 │ ├───十月 │ │ └───错误 │ └───九月 │ └───错误 └────目录2 ├───2018 │ ├───四月 │ │ └───错误 │ ├───八月 │ │ └───错误 │ ├───二月 │ │ └───错误 │ ├───一月 │ │ └───错误 │ ├───七月 │ │ └───错误 │ ├───六月 │ │ └───错误 │ ├───三月 │ │ └───错误 │ ├───五月 │ │ └───错误 │ ├───十月 │ │ └───错误 │ └───九月 │ └───错误 └────2019 ├────四月 │ └───错误 ├────八月 │ └───错误 ├────二月 │ └───错误 ├────一月 │ └───错误 ├────七月 │ └───错误 ├────六月 │ └───错误 ├────三月 │ └───错误 ├────五月 │ └───错误 ├────十月 │ └───错误 └────九月 └───错误
从 Microsoft PowerShell 文档中,我应该能够对排除路径进行通配符。我尝试了一些变化,但这是我目前所处的位置:
$root = 'C:\Users\User1\Documents\MyFolder'
$excludes = 'C:\Users\User1\Documents\MyFolder\*\2019\October\'
Get-ChildItem $root -Directory -Exclude $excludes | ForEach-Object {
Get-ChildItem $_.FullName -File -Recurse -Force | Remove-Item -Force
}
上述工作除了它仍然从C:\Users\User1\Documents\MyFolder\Directory1\2019\October\*
和删除文件C:\Users\User1\Documents\MyFolder\Directory2\2019\October\*
我试过指定.\2019\October\*.*
,但这似乎也不起作用。
解决方案
我建议一种不同的方法:
$root = 'C:\Users\User1\Documents\MyFolder'
$excludes = '*\2019\October\*'
Get-ChildItem $root -File -Recurse |
Where-Object FullName -notlike $excludes |
Remove-Item -Force -WhatIf
-WhatIf
预览删除操作;删除它以执行实际删除。
为简单起见,枚举子树中的所有文件,然后根据其完整路径是否包含\2019\October\
路径组件进行过滤。
至于你尝试了什么:
$excludes = 'C:\Users\User1\Documents\MyFolder\*\2019\October\'
该-Exclude
参数仅支持文件名模式,不支持完整路径- 尽管GitHub 上有一个待处理的功能请求以添加对路径的支持。
此外,使用Get-ChildItem -Exclude
without-Recurse
不会像人们期望的那样工作:然后仅将排除应用于输入路径- 请参阅此 GitHub 问题。
推荐阅读
- ios - 具有自动布局的 iOS 图层动画
- python - 如何在 python 中使用 X509Certificate2 对数据进行签名
- typescript - 如何使用打字稿在 vue 3 的开玩笑单元测试中访问道具?
- r - 负前瞻检查是否存在多个模式
- python - 单例的哪种用法最合适/pythonic?
- c# - 文件流读取数组到行 C#
- python - Python numpy 方法/属性比 numpy 函数快吗?
- python - 如何使用 Selenium 更新 INITIAL_REDUX_STATE?
- javascript - 从 img 标签中检索值
- javascript - 父范围没有触发 React 中的子重新渲染