【问题标题】:CMD: How to escape this powershell command in cmd?CMD:如何在 cmd 中转义这个 powershell 命令?
【发布时间】:2016-03-23 17:32:49
【问题描述】:

我有以下 powershell 命令:

(gc c:\foo.xml -Raw) -replace '(?s)(.*)<bar baz="foo" />', '$1LOL' | Out-File c:\foo.xml

我知道当我在 PowerShell 中键入此 powershell 命令时,它已验证有效。

现在我想在 cmd 提示符下运行它,所以我知道我需要在 cmd 中执行:

powershell -Command [the-above-powershell-command]

但是,powershell 命令有太多特殊字符,无论我使用什么转义符,我都无法正确处理。

有人可以为我转义 powershell 命令,以便我可以将其放入 cmd 中吗?

【问题讨论】:

  • 也许你不知道,但你不需要从cmd.exe 运行它。只需使用 PowerShell 并直接从 PowerShell 提示符运行 PowerShell 命令。

标签: powershell cmd


【解决方案1】:

自己找到了答案:

powershell -Command "(gc c:\foo.xml -Raw) -replace '(?s)(.*)<bar baz=\"foo\" />', '$1LOL' | Out-File c:\foo.xml"

诀窍是用 \ 转义 ",而不是 "。

Link 帮助我弄清楚了。

【讨论】:

    【解决方案2】:

    另一种方法是对命令进行 Base64 编码并使用 -EncodedCommand 开关:

    $CmdLine = @'
    (gc c:\foo.xml -Raw) -replace '(?s)(.*)<bar baz="foo" />', '$1LOL' | Out-File c:\foo.xml
    '@
    $CmdLineBytes = [System.Text.Encoding]::Unicode.GetBytes($CmdLine)
    $EncodedCommand = [System.Convert]::ToBase64String($CmdLineBytes)
    

    在您的情况下,这将导致字符串:

    KABnAGMAIABjADoAXABmAG8AbwAuAHgAbQBsACAALQBSAGEAdwApACAALQByAGUAcABsAGEAYwBlACAAJwAoAD8AcwApACgALgAqACkAPABiAGEAcgAgAGIAYQB6AD0AIgBmAG8AbwAiACAALwA+ACcALAAgACcAJAAxAEwATwBMACcAIAB8ACAATwB1AHQALQBGAGkAbABlACAAYwA6AFwAZgBvAG8ALgB4AG0AbAA=
    

    cmd调用它:

    powershell.exe -EncodedCommand KABnAGMAIABjADoAXABmAG8AbwAuAHgAbQBsACAALQBSAGEAdwApACAALQByAGUAcABsAGEAYwBlACAAJwAoAD8AcwApACgALgAqACkAPABiAGEAcgAgAGIAYQB6AD0AIgBmAG8AbwAiACAALwA+ACcALAAgACcAJAAxAEwATwBMACcAIAB8ACAATwB1AHQALQBGAGkAbABlACAAYwA6AFwAZgBvAG8ALgB4AG0AbAA=
    

    【讨论】:

    • 这很好!
    猜你喜欢
    • 2014-09-16
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 2021-06-20
    • 2021-11-27
    • 2017-10-04
    • 1970-01-01
    • 2018-04-11
    相关资源
    最近更新 更多