我的磁盘驱动器上有一个主文件夹,其中包含 50 个其他文件夹。现在,我想隐藏这 50 个文件夹。我可以简单地右键单击并选择“隐藏”属性复选框,但我正在寻找一种更快的方法。有什么建议吗?
Windows 8。
接受的答案存在潜在的安全问题。
通过覆盖整个Attributes
位字段,请注意,以前在文件或文件夹上定义的任何其他属性(只读,加密,...)将被静默删除。
使用二进制 OR 防止此行为:
Get-Item .\your_folder -Force | foreach { $_.Attributes = $_.Attributes -bor "Hidden" }
其他两个答案都有问题。这是一个根据注释修复它们的答案,无论是简短的符号还是较长的符号:
gci -r $folder | % { $_.Attributes = $_.Attributes -bor "Hidden" }
# alternatively
Get-ChildItem -Recurse $folder | ForEach-Object { $_.Attributes = $_.Attributes -bor "Hidden" }
解释:
Get-ChildItem
(别名gci
或ls
)中列出了文件夹中的文件。-Recurse
(别名-r
)还列出了子文件夹,子文件夹的子文件夹中的文件。-Force
其他答案中的参数不是真的需要:它的目的是列出已经隐藏的文件 br
gci -r -fo $folder | % { $_.attributes -bor "Hidden" -bxor "Hidden" }
ForEach-Object
(别名%
或foreach
)迭代输入对象,其参数是一个脚本块{ ... }
,其中当前对象是特殊变量$_
。
在该脚本块中,$_
是一个System.IO.FileSystemInfo
。它的Attribute
参数包含文件的属性。这是一个FileAttribute
enum。其中一个可能的属性是“Hidden”(枚举中的第二位,但它并不重要)。
-bor
(bitwise or) operator将“Hidden”位添加到枚举。请注意,=
运算符将覆盖该文件的所有其他属性,这可能是有问题的。
简单命令隐藏文件夹
attrib +h TestFolder
请注意,使用$f.Attributes += 'Hidden'
或$f.Attributes -= 'Hidden'
实际上将切换隐藏的标志,即在已经隐藏的文件上使用$f.Attributes += 'Hidden'
将取消隐藏它,反之亦然。
隐藏前面帖子中提到的项目的示例是幂等的,即:
$f.Attributes = $f.Attributes -bor [System.IO.FileAttributes]::Hidden
要取消幂等隐藏,可以使用:
$f.Attributes = $f.Attributes -band (-bnot (1 -shl ([Math]::Log2([Int][System.IO.FileAttributes]::Hidden))))
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(82条)