在 SO 上跟进这个问题(如何在特定位置打开 cmd 窗口?) 我正在寻找一种有效的方法将在此处打开命令提示符快捷方式添加到上下文菜单。各种解决方案建议将条目添加到 HKCR\Folder,其他解决方案建议将条目添加到 HKCR\Directory。
基于这个问题(目录与文件夹) 似乎文件夹可以是虚拟的,也可以不是,而目录始终是“真实的”。文图中文件夹是一个大圆圈,目录是一个完全封闭在文件夹圆圈内的小圆圈。
为了命令提示符,假设我可能只处理“真实”文件夹或目录是否正确?
那么问题如下:我可以在虚拟目录中打开命令提示符窗口吗?我这样做有什么理由?仅向 HKCR\Folder 添加上下文菜单项是否可以满足我的所有要求?仅向 HKCR\Directory 添加上下文菜单项是否会遗漏某些内容?
最后,为了加分:如果我想通过单击文件夹内部而不是文件夹图标来添加打开命令提示符的条目,我必须使用哪个上下文菜单项来获得此功能?
答案1
我做的最好的方法是将打开命令提示符添加到所有对象打开的命令提示符传递工作目录(cmd /k pushd %d”)并且您会在右键单击的对象的工作目录上获得命令提示符。
在大多数情况下,您可以在虚拟文件夹中打开命令提示符。不过,这取决于具体情况。例如,DFS 文件夹在 UNC 处返回命令提示符。但尝试在搜索文件夹中的对象上获取命令提示符只会让您获得该对象的真实位置。
编辑:
要在右键单击背景时获取命令提示符,您需要编写一个 shell 扩展。由于 Microsoft坚持shell 扩展用本机代码编写!me :( 请参阅 shell 扩展菜单上的 MSDN。
http://msdn.microsoft.com/en-us/library/cc144067(v=vs.85).aspx
或者您可以直接下载这个程序:Context Console Shell Extension。
答案2
对于你的附加问题:没有可以修改的注册表项让你做你想做的事情。安装上下文控制台才能获得该功能。在这种情况下,需要使用 shell 扩展,因为当您单击文件夹的背景时,您没有选择任何对象。
对于您的其他问题:如果文件系统中有一个真实文件夹作为后备,您可以在命令提示符中将 CD 转到该虚拟文件夹(例如Fonts
或Start Menu
)。纯虚拟文件夹(例如Control Panel
)没有文件系统路径,因此无法将 CD 转到该文件夹。
PowerShell 支持命名空间扩展,并允许执行诸如将您的位置设置为注册表路径之类的操作:
PS C:\> Set-Location HKLM:\Software\Classes\Directory
PS HKLM:\Software\Classes\Directory> Get-ChildItem
Hive: HKEY_LOCAL_MACHINE\Software\Classes\Directory
SKC VC Name Property
--- -- ---- --------
2 0 Background {}
0 1 DefaultIcon {(default)}
2 1 shell {(default)}
4 0 shellex {}
如果您想将注册表项添加到HKCR\Directory
,也请将它们添加到(HKCR\Drive
如果您需要它们显示驱动器的根文件夹)。