PowerShell:如何在名称为“*”(asterisk/star) 的 file/folder 上创建选择器?
PowerShell: How do I create selector on file/folder, whose name is '*' (asterisk/star)?
我需要从 PS 修改注册表。此注册表项与特定文件(所有扩展名的文件夹)的上下文菜单相关。
\HKEY_CURRENT_USER\Software\Classes\*
目前我想将项目添加到此路径:
HKCU:\Software\classes\*
|- shell
|- shellex
然而,当我在此路径上执行 dir 时,classes
文件夹中的所有项目都有输出:
PS D:\> dir "HKCU:\Software\classes\*"
Hive: HKEY_CURRENT_USER\Software\classes
Name Property
---- --------
*
.3g2 VLC.backup : WMP11.AssocFile.3G2
(default) : VLC.3g2
.3gp VLC.backup : WMP11.AssocFile.3GP
(default) : VLC.3gp
.3gp2 VLC.backup : WMP11.AssocFile.3G2
(default) : VLC.3gp2
.3gpp VLC.backup : WMP11.AssocFile.3GP
(default) : VLC.3gpp
.3mf
如果我理解正确的话,我的查询被星号通配了。注册表项(文件夹)名为 *
。 我如何只为这个文件夹创建选择器,而不是让它作为通配符使用?也应该适用于所有其他命令,而不仅仅是 dir
(Get-ChildItem
).
已经尝试过这些但没有成功:
PS D:\> dir "HKCU:\Software\classes\**"
PS D:\> dir "HKCU:\Software\classes\*"
PS D:\> dir "HKCU:\Software\classes\'*'"
PS D:\> dir "HKCU:\Software\classes\`*"
Get-ChildItem
的解决方法:
# argument -LiteralPath, unfortunatelly only for "dir" command
PS D:\> dir -LiteralPath "HKCU:\Software\classes\*"
编辑:
由于我收到了与 Get-ChildItem
相关的特定答案,请假设相同的路径适用于 New-Item
(不支持 -LiteralPath
)。
Get-ChildItem -LiteralPath "HKCU:\Software\classes\*"
或者:
Get-ChildItem "HKCU:\Software\classes\" | Where-Object PSChildName -eq '*' | Get-ChildItem
如果您想要对象本身的通用解决方案:
Get-ChildItem "HKCU:\Software\classes\" | Where-Object PSChildName -eq '*'
PowerShell 5
在 PowerShell 5 中,您可以通过在单引号内使用反引号,然后在路径后指定目录或未转义的 *
来实现此目的。对于您的示例,您可以这样做:
dir 'HKCU:\Software\classes\`*\*'
要创建项目,您可以使用以下语法:
New-Item -Path 'HKCU:\SOFTWARE\Classes\`*\shell\' -Name "My New Item"
PowerShell 7(6?)
在 PowerShell 7(可能还有 6)中,您可以使用双引号内的两个反引号 (``
) 转义星号。对于您的示例,您可以这样做:
dir "HKCU:\Software\classes\``*"
要创建项目,您可以使用以下语法:
New-Item -Path "HKCU:\SOFTWARE\Classes\``*\shell" -Name "My New Item"
请注意,PowerShell 5 方法在 PowerShell 7 中仍然有效,因此使用它实现向后和向前兼容性可能是个好主意。
我需要从 PS 修改注册表。此注册表项与特定文件(所有扩展名的文件夹)的上下文菜单相关。
\HKEY_CURRENT_USER\Software\Classes\*
目前我想将项目添加到此路径:
HKCU:\Software\classes\*
|- shell
|- shellex
然而,当我在此路径上执行 dir 时,classes
文件夹中的所有项目都有输出:
PS D:\> dir "HKCU:\Software\classes\*"
Hive: HKEY_CURRENT_USER\Software\classes
Name Property
---- --------
*
.3g2 VLC.backup : WMP11.AssocFile.3G2
(default) : VLC.3g2
.3gp VLC.backup : WMP11.AssocFile.3GP
(default) : VLC.3gp
.3gp2 VLC.backup : WMP11.AssocFile.3G2
(default) : VLC.3gp2
.3gpp VLC.backup : WMP11.AssocFile.3GP
(default) : VLC.3gpp
.3mf
如果我理解正确的话,我的查询被星号通配了。注册表项(文件夹)名为 *
。 我如何只为这个文件夹创建选择器,而不是让它作为通配符使用?也应该适用于所有其他命令,而不仅仅是 dir
(Get-ChildItem
).
已经尝试过这些但没有成功:
PS D:\> dir "HKCU:\Software\classes\**"
PS D:\> dir "HKCU:\Software\classes\*"
PS D:\> dir "HKCU:\Software\classes\'*'"
PS D:\> dir "HKCU:\Software\classes\`*"
Get-ChildItem
的解决方法:
# argument -LiteralPath, unfortunatelly only for "dir" command
PS D:\> dir -LiteralPath "HKCU:\Software\classes\*"
编辑:
由于我收到了与 Get-ChildItem
相关的特定答案,请假设相同的路径适用于 New-Item
(不支持 -LiteralPath
)。
Get-ChildItem -LiteralPath "HKCU:\Software\classes\*"
或者:
Get-ChildItem "HKCU:\Software\classes\" | Where-Object PSChildName -eq '*' | Get-ChildItem
如果您想要对象本身的通用解决方案:
Get-ChildItem "HKCU:\Software\classes\" | Where-Object PSChildName -eq '*'
PowerShell 5
在 PowerShell 5 中,您可以通过在单引号内使用反引号,然后在路径后指定目录或未转义的 *
来实现此目的。对于您的示例,您可以这样做:
dir 'HKCU:\Software\classes\`*\*'
要创建项目,您可以使用以下语法:
New-Item -Path 'HKCU:\SOFTWARE\Classes\`*\shell\' -Name "My New Item"
PowerShell 7(6?)
在 PowerShell 7(可能还有 6)中,您可以使用双引号内的两个反引号 (``
) 转义星号。对于您的示例,您可以这样做:
dir "HKCU:\Software\classes\``*"
要创建项目,您可以使用以下语法:
New-Item -Path "HKCU:\SOFTWARE\Classes\``*\shell" -Name "My New Item"
请注意,PowerShell 5 方法在 PowerShell 7 中仍然有效,因此使用它实现向后和向前兼容性可能是个好主意。