You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell与正则表达式批量将符合规则的文件设为只读

使用PowerShell和正则表达式筛选特定文件并设置只读属性

嘿,既然你已经搞定了PowerShell修改属性和获取文件列表的基础操作,那咱们直接解决正则筛选的核心问题就好!

首先,针对你需要的匹配规则——文件名扩展名前的最后两位是00-89之间的数字,我来拆解对应的正则表达式,再结合Get-ChildItem实现完整的筛选与属性修改流程:

第一步:编写匹配规则的正则表达式

咱们需要确保扩展名(比如.pdf、.msg)前面的最后两个字符是00到89的数字组合,对应的正则是:

^.*(0\d|[1-8]\d)\.[^.]+$

我来解释下每个部分的作用:

  • ^.*:匹配文件名开头的任意内容(长度不限,不管前面是字母、数字还是其他字符)
  • (0\d|[1-8]\d):核心匹配规则——0\d覆盖00-09的数字,[1-8]\d覆盖10-89的数字,两者结合正好满足你要的00-89范围
  • \.[^.]+$:匹配最后的扩展名部分,确保那两位数字紧跟在扩展名的点号前面,同时避免多扩展名文件(比如file.tar.gz)的干扰

第二步:结合Get-ChildItem筛选并修改文件属性

因为Get-ChildItem的-Filter参数不支持正则,所以咱们用Where-Object来做精准筛选。下面是完整的可运行脚本:

# 替换成你要扫描的目标文件夹路径
$targetFolder = "C:\Your\Target\Folder"

# 1. 获取符合规则的文件(需要递归扫描子文件夹的话,加上 -Recurse 参数)
$matchedFiles = Get-ChildItem -Path $targetFolder -File | Where-Object {
    $_.Name -match '^.*(0\d|[1-8]\d)\.[^.]+$'
}

# 2. 先验证匹配结果(可选,避免误操作)
Write-Host "找到符合规则的文件:"
$matchedFiles | Select-Object Name | Format-Table -AutoSize

# 3. 将匹配的文件设置为只读
foreach ($file in $matchedFiles) {
    # 两种设置只读的方式选一种即可
    # 方式一:直接修改文件属性对象
    $file.Attributes += [System.IO.FileAttributes]::ReadOnly
    # 方式二:更直观的命令式写法
    # Set-ItemProperty -Path $file.FullName -Name IsReadOnly -Value $true
    Write-Host "已将文件 $($file.Name) 设置为只读"
}

额外实用提示

  • 如果需要定期执行这个脚本,可以把它保存为.ps1文件,然后通过Windows任务计划程序设置定时任务
  • 首次运行建议只执行验证部分,确认匹配的文件完全符合预期后,再执行属性修改的代码,避免误操作

内容的提问来源于stack exchange,提问作者H Fourie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:49:19