【问题标题】:Passing arguments to batch file that have spaces in it将参数传递给其中包含空格的批处理文件
【发布时间】:2014-09-17 10:05:10
【问题描述】:

在批处理文件中给出以下命令:

start /wait "" %1"Certs\makecert.exe" -n "CN="%2 -pe -ss Root -sr LocalMachine -sky exchange -m 120 -a sha1 -len 2048 -r

您可以看到它需要将两个参数传递到批处理文件中。第一个是文件夹地址,第二个是正在创建的证书的主题名称。问题出在文件夹地址有空格的地方:C:\Program Files (x86)。

启动批处理文件的代码如下:

private void UseBatchFile(string filePath, string parameters)
    {
        using (Process process = new Process()
        {
            StartInfo = new ProcessStartInfo()
            {
                UseShellExecute = false,
                CreateNoWindow = true,
                FileName = filePath,
                Arguments = parameters,
            }
        })
        {
            process.Start();
            process.WaitForExit();
        }
    }

传入的参数如下所示:

"C:\\Program Files (x86)\\ TestCA"

批处理文件将在 C:\Program 中读取,因为它是解析为

的第一个参数
C:\ProgramCerts\makecert.exe

我尝试将字符串参数地址包含在 '' 中,并在批处理文件中使用 %~1 来删除引号。这也没有任何作用。 我无法使用 %1%2%3 创建完整地址,因为可以将其他文件路径输入到此批处理文件中。

如何将地址作为一个参数传递?

编辑:该方法被调用如下:

this.UseBatchFile(string.Format("{0}{1}", PathName, @"Certs\CACert.bat"), string.Format("{0} {1}", PathName, "TestCA"));

路径名是:C:\Program Files (x86)

【问题讨论】:

  • 很难说问题出在哪里。你能发布你是如何调用这个方法的吗?您可能还需要将 %1 放在引用中,但您可能会遇到引用地狱和安全问题?
  • @lc。编辑了如何调用该方法的答案。

标签: c# batch-file


【解决方案1】:

首先,替换这个:

string.Format("{0}{1}", PathName, @"Certs\CACert.bat")

用这个:

Path.Combine(PathName, @"Certs\CACert.bat")

以下是 Windows 如何处理这些命令行参数的参考,包括许多示例:

Parsing C++ Command-Line Arguments (MSDN)

【讨论】:

  • 使用了错误的参数组合。传递一个用“”包围的参数并仅使用 %1 而不使用 ~ 解决了该问题。在发送到批处理文件之前,这看起来像字符串格式的 "\"C:\\Program Files (x86)\\\"TestCA"。
猜你喜欢
  • 1970-01-01
  • 2011-10-04
  • 2018-08-11
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多