"Powershell Start-Process -ArgumentList"字面引用



我目前正试图创建一个命令,通过右键单击上下文菜单打开管理Powershell。对于上下文,上下文菜单命令在CMD中运行。

我的问题是,我正在尝试将D_1cd放入发生右键单击的目录中。以下命令适用于大多数目录,但如果目录路径包含空格,则它只会尝试移动到该空格之前的路径部分,从而引发错误。我的理解是,当前目录是通过%V传入的,但当我使用相同的进程运行命令echo %V时,它会将带有空格的路径拆分为2行,所以我假设路径的各个部分存储在单独的字符串中?

Powershell -noexit "Start-Process 'C:Users<me>AppDataRoamingMicrosoftWindowsStart MenuProgramsWindows PowerShellWindows 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 = "$PSHOMEpowershell.exe -NoExit -NoProfile -Command ""Set-Location '%V'"""
'directory', 'directorybackground', 'drive' | ForEach-Object {
New-Item -Path "Registry::HKEY_CLASSES_ROOT$_shell" -Name runascommand -Force |
Set-ItemProperty -Name '(default)' -Value $command -PassThru |
Set-ItemProperty -Path {$_.PSParentPath} -Name '(default)' -Value $menu -PassThru |
Set-ItemProperty -Name HasLUAShield -Value ''
}

答案来自"如何从Windows资源管理器启动PowerShell?"?

如果您想避免空间问题,可以通过在字符串中用`转义"来重用它。

例如:

$command = "Set-Location `"C:temptest space`""

字符串将变成这样,空格将被正确处理:

设置位置"C:\temp\test space">

最新更新