我的磁盘驱动器上有一个主文件夹,其中包含50个其他文件夹。现在,我想要隐藏这50个文件夹。我只需右键单击并选择“隐藏”属性复选框,但我正在寻找更快的方法来执行此操作。有什么建议?
Windows 8。
答案 0 :(得分:18)
接受的答案会带来潜在的安全问题。
通过覆盖整个Attributes
位字段,请注意以前在您的文件或文件夹上定义的任何其他属性(只读,加密,...)都将默默显示除去。
使用二进制OR来防止此行为:
Get-Item .\your_folder -Force | foreach { $_.Attributes = $_.Attributes -bor "Hidden" }
答案 1 :(得分:2)
其他两个答案都有问题。这是一个根据评论修复它们的答案,包括短记法和长记法:
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
参数并不是真正需要的:它的目的是列出属于已经隐藏了,如果你想要做的是之后隐藏它,这是没有意义的。
但是,如果您想取消隐藏您的文件,那么您需要添加 -Force
参数,以便您获得类似(简写)
gci -r -fo $folder | % { $_.attributes -bor "Hidden" -bxor "Hidden" }
ForEach-Object
(别名 %
或 foreach
)遍历输入对象。它的参数是一个脚本块 { ... }
,其中当前对象是特殊变量 $_
。
在那个脚本块中,$_
是一个 System.IO.FileSystemInfo
。它的 Attribute
参数包含文件的属性。这是一个 FileAttribute
enum。可能的属性之一是“隐藏”(枚举中的第二位,但这并不重要)。
-bor
(bitwise or) operator 将“隐藏”位添加到枚举中。请注意,=
运算符会覆盖该文件的所有其他属性,这可能会出现问题。
答案 2 :(得分:1)
对于单个文件,您可以更改attributes
属性,如下所示:
$f=get-item .\your_folder -Force
$f.attributes="Hidden"
要隐藏文件夹中的所有内容,您可以使用Get-ChildItem
,如下所示:
Get-ChildItem -path "your_path_here" -Recurse -Force | foreach {$_.attributes = "Hidden"}
答案 3 :(得分:0)
简单命令隐藏文件夹
attrib +h TestFolder
答案 4 :(得分:0)
请注意,使用 $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))))