如何将任意命令行参数从 MinGW shell 传递给本机 Windows 程序?

Posted

技术标签:

【中文标题】如何将任意命令行参数从 MinGW shell 传递给本机 Windows 程序?【英文标题】:How do I pass an arbitrary command line argument to a native Windows program from a MinGW shell? 【发布时间】:2016-05-13 19:10:18 【问题描述】:

我想要一个通用解决方案,但适用于任何有效 Windows 文件名的解决方案都是可以接受的。

【问题讨论】:

【参考方案1】:

那个外壳是 Bash。 Cygwin/MSYS2 Bash 可以接受 Windows 路径,但您需要 处理空格和反斜杠。关于反斜杠:

program 'C:\alfa.txt'
program C:\\alfa.txt
program C:/alfa.txt

关于空格:

program 'C:\alfa bravo.txt'
program C:\\alfa\ bravo.txt
program C:/alfa\ bravo.txt

如您所见,如果您提供 Windows 路径,这很简单 向前。您可能遇到的唯一问题是您是否尝试提供 Bash 路径 到 Windows 原生程序:

program /tmp/alfa.txt

Windows 原生程序没有/tmp 甚至/ 的概念。 Cygwin/MSYS2 有 cygpath 协助转换这些路径:

program $(cygpath -m /tmp/alfa.txt)
program "$(cygpath -w /tmp/alfa.txt)"
program "$(cygpath -m '/tmp/alfa bravo.txt')"
program "$(cygpath -m /tmp/alfa\ bravo.txt)"
program "$(cygpath -w '/tmp/alfa bravo.txt')"
program "$(cygpath -w /tmp/alfa\ bravo.txt)"

旁注:MinGW 是一个旧项目。您应该使用 Cygwin 或 MSYS2。

【讨论】:

如果我要传递的路径中有空格怎么办?

以上是关于如何将任意命令行参数从 MinGW shell 传递给本机 Windows 程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何将命令行参数传递给 spark-shell scala 脚本?

如何通过 docker run 将参数传递给 Shell 脚本

试图了解如何将参数从 gradle 传递到我的 shell 脚本?

如何给shell脚本传参数

Snakemake:将命令行参数传递给脚本。

bat 如何传参数给 shell