如何解决切换“使用 Powershell 显示隐藏的文件和文件夹
我一直在尝试在 .bat 或 .ps 脚本中创建一个行项目,以将“显示隐藏文件/文件夹”选项切换为 ON。到目前为止,我没有运气。我曾尝试以各种形式使用 get-childitem
命令,但它对我不起作用。我错过了什么?这甚至可以做到吗?
解决方法
注册表路径:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced
名称:隐藏
类型:双字
设置:
1 = 显示
2 = 不显示
,这里有两件事你想实现。
- 设置可以使用
Set-ItemProperty
完成的注册表项的值。 - 刷新所有打开的资源管理器窗口。我们可以使用名为 Shell.Application 的 ComObject 来执行此操作。
注意如果您没有打开任何资源管理器窗口,则在您在资源管理器窗口中按 F5 之前,这不会生效。
话虽如此,您可以编写一个类似于下面的小函数来切换资源管理器中的隐藏文件值。
function Show-HiddenFiles {
[CmdletBinding(DefaultParameterSetName = "On")]
Param (
[Parameter(Mandatory = $true,ParameterSetName = "On")]
[System.Management.Automation.SwitchParameter]
$On,[Parameter(Mandatory = $true,ParameterSetName = "Off")]
[System.Management.Automation.SwitchParameter]
$Off
)
Process {
# Set a variable with the value we want to set on the registry value/subkey.
if ($PSCmdlet.ParameterSetName -eq "On") { $Value = 1 }
if ($PSCmdlet.ParameterSetName -eq "Off") { $Value = 2 }
# Define the path to the registry key that contains the registry value/subkey
$Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
# Set the registry value/subkey.
Set-ItemProperty -Path $Path -Name Hidden -Value $Value
# Refresh open Explorer windows.
# You will need to refresh the window if you have none currently open.
# Create the Shell.Application ComObject
$Shell = New-Object -ComObject Shell.Application
# For each one of the open windows,refresh it.
$Shell.Windows() | ForEach-Object { $_.Refresh() }
}
}
使用很简单。
Show-HiddenFiles -On
Show-HiddenFiles -Off
如果您只想在 PowerShell 中显示隐藏文件,您可以使用 -Hidden or -Force parameter of Get-ChildItem
-Hidden
仅返回隐藏文件。-Force
返回隐藏和非隐藏文件。
使用 Ash 的 fine script,这里有一个轻微的改进。 这允许没有参数的第三个选项,它只会切换当前设置。
function Show-HiddenFiles {
Param (
[Parameter(Mandatory = $False,Position=0)]
[String] $Setting
)
# Define the path to the registry key that contains the
# registry value/subkey
$Path = "HKCU:\Software\Microsoft\Windows\CurrentVersion" +
"\Explorer\Advanced"
#No argument toggle setting..
If ($Args.Count -eq 0) {
$GIPArgs = @{Path = $Path
Name = "Hidden"}
If ((Get-ItemProperty @GIPArgs ).Hidden -eq 1) {
$Value = 2
}
Else {$Value = 1}
}
Else {
# Set a variable with the value we want to set on the
# registry value/subkey.
If ($Setting -eq "On" ) { $Value = 1 }
Else { $Value = 2 }
}
# Set the registry value/subkey.
Set-ItemProperty -Path $Path -Name Hidden -Value $Value
# Refresh open Explorer windows.
# You will need to refresh the window if you have none
# currently open.
# Create the Shell.Application ComObject
$Shell = New-Object -ComObject Shell.Application
# For each one of the open windows,refresh it.
$Shell.Windows() | ForEach-Object { $_.Refresh() }
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。