[玩转系统] 如何使用 PowerShell Remove-Item 删除文件
作者:精品下载站 日期:2024-12-14 03:44:26 浏览:17 分类:玩电脑
如何使用 PowerShell Remove-Item 删除文件
删除文件和清理目录可能是一项耗时的任务,尤其是当您需要定期在多台计算机上执行相同的任务时。但借助 PowerShell,我们可以创建小脚本,通过使用 Remove-Item cmdlet 快速高效地删除文件。
PowerShell 不仅允许我们删除单个文件,甚至可以根据特定条件删除整个目录或一组文件。您是否知道也可以仅删除存在的文件、早于 x 天的文件或基于通配符模式删除文件?
在本文中,我们将了解如何在 PowerShell 中删除文件。以及如何使用不同的选项仅删除特定文件、验证删除操作等等。
使用 PowerShell 删除文件
要使用 PowerShell 删除文件,我们需要使用 Remove-Item cmdlet。此 cmdlet 可以根据条件删除一项或多项。 Remove-Item cmdlet 不仅可用于删除文件,还可用于删除文件夹、注册表项、变量、函数等。我们将在本文中重点讨论删除文件。
通过Remove-Item cmdlet,我们可以使用以下参数:
-Path指定需要删除的项目的路径。
-LiteralPath项目的确切路径
-Include指定要包含的路径元素,例如 *.txt
-Exclude指定要排除的路径元素,例如 *.txt
-Recurse删除指定位置和所有子文件夹中的项目
-Force用于删除只读文件或隐藏项目
-Confirm提示确认
因此,要使用 PowerShell 删除单个文件,我们只需指定文件的完整路径(包括文件名)。例如,如果我们想从下面的文件夹中删除 readme.txt 文件,我们可以这样做:
Remove-Item -Path C:\temp\files\readme.txt
请注意,该 cmdlet 不会要求确认,文件将立即被删除。因此,当您编写要删除一个或多个文件的 PowerShell 脚本时,首先对其进行测试非常重要。我们可以通过使用 -confirm
或 -whatif
参数来做到这一点。如果您想删除该文件,Confirm 将给出提示,其中 if 显示 cmdlet 在不实际删除该项目的情况下将执行的操作:
# Using Confirm
Remove-Item -Path C:\temp\files\readme.txt -Confirm
Confirm
Are you sure you want to perform this action?
Performing the operation "Remove File" on target "C:\temp\files\readme.txt".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
# Or using WhatIf
Remove-Item -Path C:\temp\files\readme.txt -whatif
What if: Performing the operation "Remove File" on target "C:\temp\files\readme.txt".
删除文件夹中的所有文件
我们还可以使用 PowerShell 中的 Remove-Item
cmdlet 来删除文件夹中的所有文件。现在需要注意的是,cmdlet 还可以删除文件夹。因此,要仅删除文件,我们将使用通配符来仅选择名称中包含点 .
的项目。这样,仅删除文件,而不删除任何子文件夹:
# Remove all files from the path c:\temp\files
# Tip: test the results first with the -whatif parameter
Remove-Item -Path C:\temp\files\*.*
另一种选择是使用带有参数 -File
的 cmdlet Get-ChildItem
来仅获取文件,然后通过管道将 Remove-Item
cmdlet 传递给使用 PowerShell 删除文件:
Get-ChildItem -Path C:\temp\files\ -File | Remove-Item
删除文件夹和子文件夹中的文件
要不仅删除文件夹中的文件,还要删除子文件夹中的文件,您需要使用 -Recurse 参数。只有一个问题,你不能将 -Recurse 重组与仅文件选择方法 *.*
一起使用。以下面的例子为例:
Remove-Item -Path C:\temp\files\*.* -Recurse
您可能希望这只会删除文件夹和子文件夹中的文件。但是,通过在路径中使用通配符,只会选择路径名中包含 .
的项目(文件)。因此 cmdlet 不会遍历任何子文件夹。
要删除文件夹和所有子文件夹中的所有文件,我们必须仅指定父文件夹的路径,并使用 -Ininclude
参数仅选择文件:
# Delete all files from the folder c:\temp\files and it's subfolders
Remove-Item -Path C:\temp\files\ -Recurse -Include *.*
另一种选择是首先使用 Get-ChildIte
m cmdlet 从文件夹和子文件夹中获取文件,然后删除它们:
Get-ChildItem -Path C:\temp\files\ -File -Recurse | Remove-Item
删除只读和隐藏文件
默认情况下,只读文件和隐藏文件不会被删除。让我们看一下下面的例子,文件“la-srv-dc01.log”被标记为只读,而template.html是一个隐藏文件。
如果我们尝试删除该文件夹中的所有文件,那么您将在只读文件上收到错误消息,表明您没有足够的访问权限来执行此操作。隐藏文件甚至根本没有被删除。
那么我们该如何删除这些文件呢?要删除只读文件和隐藏文件,我们需要使用 -Force
参数:
# Remove all files, including read-only and hidden
Remove-Item -Path C:\temp\files\*.* -Force
PowerShell 删除文件(如果存在)
在脚本内使用 Remove-Item cmdlet 时,最好在尝试删除文件之前测试该文件是否存在。我们可以使用 Test-Path cmdlet 来完成此操作。这将检查文件是否存在并根据结果返回 true 或 false。通过在 if 语句中使用它,我们可以确保仅在文件存在时才删除该文件:
$file = C:\temp\files\readme.txt
if (Test-Path -Path $file) {
Remove-Item -Path $file
}
在 PowerShell 中使用过滤器删除文件
我们现在已经了解了使用 PowerShell 删除文件的一些原则。但除了简单地删除单个文件或文件夹中的所有文件之外,您还会经常遇到只需要删除x天之前的文件或特定文件类型的文件的情况。
我们可以使用多种方法来仅选择这些文件并使用 PowerShell 删除它们。使用过滤器时,请务必确保在实际删除文件之前首先测试并验证选择。
使用包含过滤器
Include 参数允许我们选择文件名中包含特定字符串或字符串一部分的所有文件。例如,如果您只想从文件夹中删除 .log 文件,您可以执行以下操作:
# Remove all .log items
Remove-Item -Path C:\temp\files\ -Include *.log
include 参数不仅限于文件扩展名,您还可以根据文件名的一部分来选择文件。也可以指定多个要选择的“关键字”:
# Get all files that have the word app or process in their name.
Remove-Item -Path C:\temp\files\ -Include *app*, *process* -Recurse -WhatIf
# Result
What if: Performing the operation "Remove File" on target "C:\temp\files\subfolder\LT3452-process-errors.log".
What if: Performing the operation "Remove File" on target "C:\temp\files\subfolder\LT3452-process.log".
What if: Performing the operation "Remove File" on target "C:\temp\files032021-app.log".
What if: Performing the operation "Remove File" on target "C:\temp\files032022-app.log".
使用排除过滤器
遵循include参数的原则,我们也可以排除文件。包含和排除可以一起使用,因此您可以删除除进程日志文件之外的所有日志文件:
Remove-Item -Path C:\temp\files\ -Include *.log -Exclude *process* -Recurse -WhatIf
# Result
What if: Performing the operation "Remove File" on target "C:\temp\files032021-app.log".
What if: Performing the operation "Remove File" on target "C:\temp\files032022-app.log".
What if: Performing the operation "Remove File" on target "C:\temp\files\la-srv-dc01.log".
使用 PowerShell 删除超过 x 天的文件
清理目录时的常见做法是仅删除早于 x 天的文件。为此,我们首先需要计算文件日期。假设我们要删除所有超过 30 天的文件,那么我们首先需要获取 30 天前的日期:
# Get the date from today minus 30 days
$dateTime = (Get-Date).AddDays(-30)
下一步是获取早于给定日期的所有文件。为此,我们将文件的 lastwritetime
与我们计算的 datetime
进行比较:
Get-ChildItem -Path $Path -Recurse -File | Where-Object { $_.LastWriteTime -lt $dateTime }
然后,我们只需在其后面传递 Remove-Item
cmdlet 即可实际删除文件:
$dateTime = (Get-Date).AddDays(-30)
$path = "C:\temp\files\"
Get-ChildItem -Path $Path -Recurse -File | Where-Object { $_.LastWriteTime -lt $dateTime } | Remove-Item
删除大于的文件
要删除大于给定大小的所有文件,我们首先需要将文件大小从 Mb 转换为 kbits。有了正确的大小,我们就可以选择所有大于给定大小的文件,并使用 Remove-Item
cmdlet 删除它们:
$path = "C:\temp\files\"
# Set file size
$sizeInMb = 500
# Calculate actual file size
$size = $sizeInMb*1024*1024
# Delete all files that are larger then given size
Get-ChildItem -Path $Path -Recurse -File | Where-Object { $_.length -gt $size } | Remove-Item
总结
在自动管理和删除文件方面,PowerShell 是一个很棒的工具。您可以编写每周清理旧文件的脚本,以快速查找并删除给定文件夹中的大文件。
请记住,文件将被永久删除,因此请确保在实际删除文件之前先使用
参数测试命令。
我希望这篇文章对您有用,如果您有任何疑问,请在下面发表评论。
- 上一篇:[精彩网文] 自尊+自律=自信
- 下一篇:[精彩网文] 如何处理愤怒
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag