C# ProcessStartInfo忽略参数中的双引号

C# ProcessStartInfo忽略参数中的双引号,c#,cmd,talend,processstartinfo,C#,Cmd,Talend,Processstartinfo,以下命令在cmd中输入时有效: "C:\Program Files\Scripts_Talend\SynchroExo_run.bat" --context_param FileCode=ABCD --context_param FilePath="//networkname/Folder/file.xls" --context_param ReportFilePath="" 但当我使用ProcessStartInfo执行它时,它不起作用: ProcessStartInfo lTalendSc

以下命令在cmd中输入时有效:

"C:\Program Files\Scripts_Talend\SynchroExo_run.bat" --context_param FileCode=ABCD --context_param FilePath="//networkname/Folder/file.xls" --context_param ReportFilePath=""
但当我使用ProcessStartInfo执行它时,它不起作用:

ProcessStartInfo lTalendScriptInfo = new ProcessStartInfo("cmd.exe", "/c " + lCommand)
    {
        CreateNoWindow = true,
        UseShellExecute = false,
        RedirectStandardError = true,
        RedirectStandardOutput = true
    };
Process lTalendScriptProcess = Process.Start(lTalendScriptInfo);
lCommand与前面显示的命令字符串相同。由于\,引号被正确转义

对于ProcessStartInfo,错误为:'C:\Program'未被识别为内部或外部命令、可操作程序或批处理文件 好像双引号被忽略,第一个空格后面的部分作为参数


cmd和ProcessStartInfo之间的解释有什么不同吗?

用一对\“make it work”包装整个命令字符串

最后一个命令字符串如下所示:

""C:\Program Files\Scripts_Talend\SynchroExo_run.bat" --context_param FileCode=ABCD --context_param FilePath="//networkname/Folder/file.xls" --context_param ReportFilePath="""
您的字符串不包含任何引号。它只是:

C:\Program Files\Scripts_Talend\SynchroExo_run.bat
当您将其与参数连接在一起时,您将得到一个无法执行的字符串

在任何情况下,运行任何可执行文件或批处理都不需要调用
cmd.exe
,只需将路径作为参数传递给…可执行文件。此处不需要使用额外字符串,因为参数需要路径:

var batchPath="C:\Program Files\Scripts_Talend\SynchroExo_run.bat";
var arguments = "--context_param FileCode=ABCD --context_param FilePath=\"//networkname/Folder/file.xls\" --context_param ReportFilePath=\"\"";

var procInfo= new ProcessStartInfo(batchPath, arguments)
{
    CreateNoWindow = true,
    UseShellExecute = false,
    RedirectStandardError = true,
    RedirectStandardOutput = true
};
var scriptProcess= Process.Start(procInfo);

引号不会被忽略。它们根本不存在。您的字符串不包含任何引号。无论如何,调用都是错误的-您不需要调用
cmd.exe
来运行任何可执行文件,即使它是批处理文件。只需使用
new ProcessStartInfo(“C:\Program Files\Scripts\Talend\Synchroxo\u run.bat”--context\u-param-FileCode=ABCD--context\u-param-FilePath=
“…”`您只是掩盖了问题。您不需要首先使用
cmd.exe
,只需调用批处理。双引号也需要转义。您错过了参数中的双引号