我目前正在尝试创建一个命令,从右键单击上下文菜单打开管理员Powershell。对于上下文,上下文菜单命令在CMD中运行。
我的问题是我正在尝试cd
进入右键单击的目录。下面的命令适用于大多数目录,但如果目录路径包含空格,那么它只会尝试移动到空格之前的路径部分,从而引发错误。我的理解是当前目录是通过%V
传入的,但是当我使用相同的进程运行命令echo %V
时,它将带有空格的路径分成2行,所以我假设路径的各个部分存储在单独的字符串中?
Powershell -noexit "Start-Process 'C:\Users\<me>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell\Windows PowerShell.lnk' -ArgumentList '-noexit','Set-Location -literalPath `"%V`"' -Verb RunAs"
我已经更新了上面的命令以匹配下面的建议,当右键单击桌面(之前因缺少空格而工作)时,我现在收到以下错误:
Set-Location : Cannot find path 'C:\Users\<me>\Desktop`' because it does not exist.
At line:1 char:1
+ Set-Location -literalPath `C:\Users\<me>\Desktop`
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\<me>\Desktop`:String) [Set-Location], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand
请注意,在上述两个代码块中,<me>
是我的实际用户名。
我一直在撕扯我的头发,试图在路径上加上引号,但由于我已经使用单引号和双引号,我似乎无法让Powershell引用引号。
非常感谢任何帮助,提前谢谢。
编辑:
对于那些仍在寻找答案的人,我运行了以下Powershell脚本,将功能命令添加到我的上下文菜单中:
$menu = 'Open Windows PowerShell Here as Administrator'
$command = "$PSHOME\powershell.exe -NoExit -NoProfile -Command ""Set-Location '%V'"""
'directory', 'directory\background', 'drive' | ForEach-Object {
New-Item -Path "Registry::HKEY_CLASSES_ROOT\$_\shell" -Name runas\command -Force |
Set-ItemProperty -Name '(default)' -Value $command -PassThru |
Set-ItemProperty -Path {$_.PSParentPath} -Name '(default)' -Value $menu -PassThru |
Set-ItemProperty -Name HasLUAShield -Value ''
}
答案 0 :(得分:2)
如果您想避免空间问题,可以通过在字符串中使用`转义"
来重复使用{。}}。
例如:
$command = "Set-Location `"C:\temp\test space`""
字符串将变为此,并且将正确处理空格:
Set-Location&#34; C:\ temp \ test space&#34;