powershell - 如何在 Windows 10 的 cmd 中保留多个空格作为 powershell 的字符串参数

标签 powershell cmd windows-10

我正在尝试通过 cmd 运行带有多个字符串参数的 powershell 命令。

上下文是我想使用 Compress-Archive来自 Matlab 函数/脚本的 cmdlet。而Matlab只能访问cmd。

但是在调用powershell.exe时我找不到在字符串参数中保留连续空格的方法在命令中。

C:\Users\Artus>powershell.exe echo 'a   c'
a c

C:\Users\Artus>powershell.exe echo \"a   c\"
a c

C:\Users\Artus>powershell.exe echo `"a   c`"

c`

C:\Users\Artus>powershell.exe echo \"`'a   c`'\"
'a c'

我尝试调整 this 的答案, thisthis问题,但没有任何效果。

在向 powershell.exe 传递参数时如何避免删除连续空格?有没有办法要求 powershell.exe 接受参数作为字符串文字?

最佳答案

Theo 添加解释有效的解决办法:

# Use of "..." around the entire argument is the key.
# (The extra space before and after the command is just for visual clarity.)
powershell.exe " echo 'a    c' "

# Alternative with embedded double-quoting
powershell.exe " echo \"a    c\" "

也就是说,整个命令括在“...”中是必要的,以避免您看到的空白规范化


当您将命令(一段 PowerShell 代码)传递给 PowerShell 时 CLI ,通过 -Command (-c) 参数(在您的情况下是位置隐含的),PowerShell 执行以下命令行解析< em>首先,将命令行拆分为:

  • 空格分隔的标记
  • 双引号标记("...")即使包含空格也会被识别为单个标记,并且内部空间按原样保留;请注意,这些(未转义的)" 在此过程中被删除)。
    • 注意:相比之下,'...' 封闭的 token 不会在命令行上被识别为单个 token (即使在 PowerShell session 中它们也是如此) ,以便将 'a b' 拆分为逐字 'ab'

然后将生成的标记与单个空格连接以形成单个字符串,然后将其解释为 PowerShell 代码并执行。

正是在按空格(标记之间可以是任意个空格)进行分割的过程中,有关标记之间有多少空格的信息会丢失。

只有在 "..." 封闭的标记内,空格才会按原样保留,因此在上面的整个命令周围使用 "..."

如果您需要使用 " 引用作为 PowerShell 命令的一部分(以使用字符串插值)," 字符必须转义为 \",如顶部的第二个命令所示。 但是,如果您从 cmd.exe/批处理文件调用,则可能会中断,因为 cmd.exe 解析命令行。在此类极端情况下,请使用 this answer 中讨论的解决方法。 .

关于powershell - 如何在 Windows 10 的 cmd 中保留多个空格作为 powershell 的字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73308002/

相关文章:

windows - 通过CMD自动重启无响应程序

batch-file - 如何在第二部分的for循环中制作管道?

windows-10 - 如何在 Windows 10 中禁用 Winscard 发现?

windows-10 - Windows 10 游戏栏是如何实现的?

c# - 如何使用 Windows 10 附带的 "Microsoft Print To PDF"打印机以编程方式在 WPF 中打印到 PDF 文件?

azure - 使用 Microsoft.Graph PowerShell 模块创建 Azure AD 应用程序时无法设置 OAuth2 权限范围

Powershell:抓取http屏幕并将特定行作为变量返回

Powershell 模块 list "ScriptsToProcess"

powershell - 如何在Powershell中获得不同项目的编号计数

batch-file - 如何在批处理文件中将环境变量设置为带有空格的值?