如何使用 PowerShell 删除空子文件夹?
我有一个共享对于最终用户来说是一个“垃圾抽屉”。他们能够创建他们认为合适的文件夹和子文件夹。我需要实现一个脚本来删除创建时间超过 31 天的文件。
我是从 Powershell 开始的。我需要通过删除现在为空的子文件夹来跟踪文件删除脚本。由于子文件夹的嵌套,我需要避免删除没有文件的子文件夹,但其下面有一个包含文件的子文件夹。
例如:
FILE3a
已存在 10 天。FILE3
已存在 45 天。- 我想清理结构,删除超过 30 天的文件,并删除空的子文件夹。
C:\Junk\subfolder1a\subfolder2a\FILE3a
C:\Junk\subfolder1a\subfolder2a\subfolder3a
C:\Junk\subfolder1a\subfolder2B\FILE3b
期望的结果:
- 删除:
FILE3b
、subfolder2B
&子文件夹3a
。 - 保留:
subfolder1a
、subfolder2a
和FILE3a
。
我可以递归地清理文件。如何在不删除 subfolder1a
的情况下清理子文件夹? (“垃圾”文件夹将始终保留。)
I have a share that is a "junk drawer" for end-users. They are able to create folders and subfolders as they see fit. I need to implement a script to delete files created more than 31 days old.
I have that started with Powershell. I need to follow up the file deletion script by deleting subfolders that are now empty. Because of the nesting of subfolders, I need to avoid deleting a subfolder that is empty of files, but has a subfolder below it that contains a file.
For example:
FILE3a
is 10 days old.FILE3
is 45 days old.- I want to clean up the structure removing files older than 30 days, and delete empty subfolders.
C:\Junk\subfolder1a\subfolder2a\FILE3a
C:\Junk\subfolder1a\subfolder2a\subfolder3a
C:\Junk\subfolder1a\subfolder2B\FILE3b
Desired result:
- Delete:
FILE3b
,subfolder2B
&subfolder3a
. - Leave:
subfolder1a
,subfolder2a
, andFILE3a
.
I can recursively clean up the files. How do I clean up the subfolders without deleting subfolder1a
? (The "Junk" folder will always remain.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
我将分两遍执行此操作 - 首先删除旧文件,然后删除空目录:
这种类型的操作演示了 PowerShell 中嵌套管道的强大功能,第二组命令演示了这一点。它使用嵌套管道递归地确定任何目录下是否有零个文件。
I would do this in two passes - deleting the old files first and then the empty dirs:
This type of operation demos the power of nested pipelines in PowerShell which the second set of commands demonstrates. It uses a nested pipeline to recursively determine if any directory has zero files under it.
本着第一个答案的精神,这是删除空目录的最短方法:
当目录具有隐藏文件夹(例如 .svn)时,需要 -force 标志
In the spirit of the first answer, here is the shortest way to delete the empty directories:
The -force flag is needed for the cases when the directories have hidden folders, like .svn
这将在父目录之前对子目录进行排序,从而解决空嵌套目录问题。
This will sort subdirectories before parent directories working around the empty nested directory problem.
添加到最后一个:
这将使其完成,它将继续搜索以删除 $StartingPoint 下的所有空文件夹
Adding on to the last one:
This will make it complete where it will continue searching to remove any empty folders under the $StartingPoint
我需要一些企业友好的功能。这是我的看法。
我从其他答案中的代码开始,然后添加了一个带有原始文件夹列表的 JSON 文件(包括每个文件夹的文件计数)。删除空目录并记录它们。
https://gist.github.com/yzorg/e92c5eb60e97b1d6381b
I needed some enterprise-friendly features. Here is my take.
I started with code from other answers, then added a JSON file with original folder list (including file count per folder). Removed the empty directories and log those.
https://gist.github.com/yzorg/e92c5eb60e97b1d6381b
要删除超过 30 天的文件:(
只需删除
-whatif
即可实际执行。)跟进:
To remove files older than 30 days:
(Just remove the
-whatif
to actually perform.)Follow up with:
这对我有用。
删除早于
$limit
的文件:删除删除旧文件后留下的任何空目录:
This worked for me.
Delete files older than the
$limit
:Delete any empty directories left behind after deleting the old files: