【问题标题】:Literal quotes in "Powershell Start-Process -ArgumentList"“Powershell Start-Process -ArgumentList”中的文字引号
【发布时间】:2017-10-19 07:41:25
【问题描述】:

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

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

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

请注意,在上述两个代码块中,&lt;me&gt; 是我的实际用户名。

我一直在努力在路径周围加上引号,但由于我已经使用单引号和双引号,我似乎无法让 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 ''
}

How do I start PowerShell from Windows Explorer?找到答案

【问题讨论】:

    标签: powershell cmd contextmenu powershell-5.0


    【解决方案1】:

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

    例如:

    $command = "Set-Location `"C:\temp\test space`""
    

    字符串会变成 this 并且空格会被正确处理:

    Set-Location "C:\temp\test space"

    【讨论】:

    • 也许我的问题不是很清楚,抱歉。我的问题是 %V 路径中的空格,Powershell 可执行文件很好。我尝试将 `" 放在 %V 周围,但仍然收到错误消息。
    • 确切的错误是什么?你有没有把' 放在`" 周围?
    • 我已经更新了我上面的问题,包括错误和我修改后使用的完整命令。
    猜你喜欢
    • 2015-08-12
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    相关资源
    最近更新 更多