使用PowerShell隐藏文件夹

时间:2016-01-07 19:04:58

标签: powershell

我的磁盘驱动器上有一个主文件夹,其中包含50个其他文件夹。现在,我想要隐藏这50个文件夹。我只需右键单击并选择“隐藏”属性复选框,但我正在寻找更快的方法来执行此操作。有什么建议?

Windows 8。

5 个答案:

答案 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" }

说明:

  1. Get-ChildItem(别名 gcils)列出文件夹中的文件。 -Recurse(别名 -r)还列出子文件夹、子文件夹的子文件夹等中的文件。其他答案中的 -Force 参数并不是真正需要的:它的目的是列出属于已经隐藏了,如果你想要做的是之后隐藏它,这是没有意义的。
    但是,如果您想取消隐藏您的文件,那么您需要添加 -Force 参数,以便您获得类似(简写)

    这样的命令
    gci -r -fo $folder | % { $_.attributes -bor "Hidden" -bxor  "Hidden" }
    
  2. ForEach-Object(别名 %foreach)遍历输入对象。它的参数是一个脚本块 { ... },其中当前对象是特殊变量 $_

  3. 在那个脚本块中,$_ 是一个 System.IO.FileSystemInfo。它的 Attribute 参数包含文件的属性。这是一个 FileAttribute enum。可能的属性之一是“隐藏”(枚举中的第二位,但这并不重要)。

  4. -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))))