将参数传递到包含空格的批处理文件
本文关键字:批处理文件 空格 包含 参数传递 | 更新日期: 2023-09-27 18:22:20
在批处理文件中给定以下命令:
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创建完整地址,因为其他文件路径可以插入此批处理文件。
如何将地址作为一个参数传递?
EDIT:方法调用如下:
this.UseBatchFile(string.Format("{0}{1}", PathName, @"Certs'CACert.bat"), string.Format("{0} {1}", PathName, "TestCA"));
路径名为:C:''Program Files(x86)
首先,替换这个:
string.Format("{0}{1}", PathName, @"Certs'CACert.bat")
这个:
Path.Combine(PathName, @"Certs'CACert.bat")
以下是Windows如何处理这些命令行参数的参考,包括许多示例:
解析C++命令行参数(MSDN)