【问题标题】:How to tackle spaces in commandline by c#如何通过c#处理命令行中的空格
【发布时间】:2020-05-04 15:47:30
【问题描述】:

我无法通过 c# 执行命令。该命令由两条路径组成,我必须将它们组合起来。两条路径都包含空格。

        String arguments = "/K \"" + dtExecPath + "\"" + @" /f " + "\"" + tmpPackagePath + "\"";
       // arguments = AddQuotesIfRequired(arguments);
        Console.WriteLine("TEST: " + arguments);

        System.Diagnostics.Process process = new System.Diagnostics.Process();
        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
        startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
        startInfo.FileName = "cmd.exe";
        startInfo.Arguments = @arguments;
        process.StartInfo = startInfo;
        process.Start();

执行代码时,出现以下错误:“找不到 C:\Program”。

生成的命令如下所示:

TEST: /K "C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn\DTEXEC.exe" /f "C:\Users\toki\source\repos\Integration Services Project1\Integration Services Project1\tmp\O2Data (1).dtsx"

什么是错误?

【问题讨论】:

  • 您是否尝试过该字符串是否真的在命令行上有效?

标签: c# cmd processstartinfo


【解决方案1】:

这不是 C# 问题。如何解析参数取决于您正在启动的进程 (cmd),而不是父进程。

根据docs for cmd,您只需要一组引号。官方文档中没有明确的是如何处理嵌套引号。 This page 表示你应该在开头和结尾加上双引号;这似乎对我有用:

String arguments = "/K \"\"" + dtExecPath + "\"" + @" /f " + "\"" + tmpPackagePath + "\"\"";

【讨论】:

    【解决方案2】:

    我能够通过设置 startInfo.WorkingDirectory 解决问题;只有这样,该过程才会执行而不会失败

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      相关资源
      最近更新 更多