递归处理含隐藏文件的Exe命令问题:Get-ChildItem对隐藏文件无效
解决PowerShell递归处理所有文件(含隐藏文件)的attrib命令问题
我懂你的困扰——用Get-ChildItem -Recurse | foreach {attrib.exe -s -h $_.FullName}处理不了隐藏文件,但直接用attrib.exe -s -h '.\path\*'却能生效,核心原因其实很简单:默认的Get-ChildItem不会抓取隐藏的文件和目录,你的循环根本没遍历到那些隐藏项,自然看不到效果。
下面给你两个靠谱的解决方案:
方案1:让Get-ChildItem获取所有项(包括隐藏/系统项)
给Get-ChildItem加上-Force参数,它就会返回所有文件和目录(包含隐藏、系统属性的项),再结合循环调用attrib就能搞定:
Get-ChildItem -Recurse -Force | ForEach-Object { attrib.exe -s -h $_.FullName }
-Force的作用:强制显示通常被隐藏的项目(比如隐藏文件、系统文件、隐藏目录),确保你的循环能覆盖到所有目标。
方案2:结合目录遍历+attrib通配符批量处理
既然你发现attrib.exe配合通配符*能处理目录下所有文件,那可以递归遍历所有目录,对每个目录执行一次带通配符的attrib命令:
# 处理所有目录下的文件(包括隐藏文件) Get-ChildItem -Recurse -Force -Directory | ForEach-Object { attrib.exe -s -h "$($_.FullName)\*" } # 如果还需要处理目录本身,再加这一行 Get-ChildItem -Recurse -Force -Directory | ForEach-Object { attrib.exe -s -h $_.FullName }
这种方式的优势是减少attrib的调用次数,效率更高,尤其是在文件数量很多的时候。
验证小技巧
你可以先单独运行Get-ChildItem -Recurse -Force,看看输出结果里是否包含了那些之前看不到的隐藏文件/目录,确认没问题后再执行attrib命令,这样能提前排查遍历范围的问题。
内容的提问来源于stack exchange,提问作者Bad_ptr
相关产品推荐
相关产品推荐

