如何将带有双引号的命令行开关传递给 Process.run()?

时间:2021-02-06 04:34:36

标签: flutter dart cmd

所以我有这个功能,我用它在 Brave 浏览器中启动网址。我希望能够使用 --profile-directory 开关在特定配置文件中启动我的 url,但 Dart 以不同的方式处理我的参数中的引号。 这是我要执行的命令:

start brave --profile-directory="Profile 1" "https://example.com"

Dart 代码是这样的:

Process.run(
  "start",
  [
    'brave',
    '--profile-directory="Profile 1"',
    url,
  ],
  runInShell: true,
);

但是,它用“\”替换了我的双引号。我看到一个错误对话框,上面写着 "Windows cannot find 1\" ". Make sure you typed the name correctly, and then try again.

我尝试使用 '\"Profile 1\"' 来逃避它们,但这也无济于事。 有一段时间是这种情况,但现在发生了一些不寻常的事情。同样的命令在配置文件选择窗口中启动 Brave,要求我选择一个配置文件。

我也尝试传递这样的参数:['brave', '--profile-directory', '"Profile 1"']。这个命令甚至没有启动勇敢。

如何使用 Process.run() 正确执行上述命令?我在 Windows 上使用 Flutter。

1 个答案:

答案 0 :(得分:0)

找到解决方案:

不使用 start 命令和 runInShell 并使用直接 exe 引用直接在可执行文件中传递参数解决了该问题。

Process.run(
    'C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe --profile-directory="Profile 1"',
    [url]);
相关问题