在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);
l命令与之前显示的命令字符串相同。由于\。
,报价被正确转义使用ProcessStartInfo时,错误为:'C:\ Program'无法识别为内部或外部命令,可运行程序或批处理文件 好像双引号被忽略了,第一个空格后面的部分就是参数。
cmd和ProcessStartInfo之间的解释是否存在差异?
答案 0 :(得分:2)
您的字符串不包含任何引号。它只是:
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);
答案 1 :(得分:0)
用一对“使它工作。
包装整个命令字符串。”最后的命令字符串如下所示:
""C:\Program Files\Scripts_Talend\SynchroExo_run.bat" --context_param FileCode=ABCD --context_param FilePath="//networkname/Folder/file.xls" --context_param ReportFilePath="""