c#运行命令行中的字符串格式

c#运行命令行中的字符串格式,c#,string,command-line,C#,String,Command Line,如果我在控制台中运行以下命令,它将成功: "C:\Users\myAccount.Unit\Favorites\Downloads\fiji.app (1)\fiji.exe" -macro "C:\Users\myAccount.Unit\Favorites\Downloads\fiji.app (1)\macros\FFTBatch.ijm" C:\Users\myAccount.Unit\Documents\Untitled001\ 在哪里 “C:\Users\myAccount.Uni

如果我在控制台中运行以下命令,它将成功:

"C:\Users\myAccount.Unit\Favorites\Downloads\fiji.app (1)\fiji.exe" -macro "C:\Users\myAccount.Unit\Favorites\Downloads\fiji.app (1)\macros\FFTBatch.ijm" C:\Users\myAccount.Unit\Documents\Untitled001\
在哪里
“C:\Users\myAccount.Unit\Favorites\Downloads\fiji.app(1)\fiji.exe”
是应用程序文件

“C:\Users\myAccount.Unit\Favorites\Downloads\fiji.app(1)\macros\FFTBatch.ijm”
是执行的宏文件

C:\Users\myAccount.Unit\Documents\Untitled001\
是上一个宏处理的图像

然而,当我使用C#来完成这项工作时,它失败了(意味着根本没有响应)。有关守则如下:

string _fijiExeFile = "C:\\Users\\myAccount.Unit\\Favorites\\Downloads\\fiji.app (1)\\fiji.exe";
string _ijmFile = "C:\\Users\\myAccount.Unit\\Favorites\\Downloads\\fiji.app (1)\\macros\\FFTBatch.ijm";
string _inputDir = "C:\\Users\\myAccount.Unit\\Documents\\Untitled001\\";
string fijiCmdText = string.Format("/C \"{0}\" -macro \"{1}\" {2}", _fijiExeFile, _ijmFile, _inputDir);

try
{
    System.Diagnostics.Process process = new System.Diagnostics.Process();
    System.Diagnostics.ProcessStartInfo startInfo = new        System.Diagnostics.ProcessStartInfo();
    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    startInfo.FileName = "cmd.exe";
    startInfo.Arguments = fijiCmdText;
    process.StartInfo = startInfo;
    process.Start();
    _processOn = true;
    process.WaitForExit();

    ret = 1;
}
catch (Exception ex)
{
    ret = 0;
}
(路径实际上是从UI获得的,我只是发布它是什么。)

这是我介入时观察到的
fijiCmdText

"/C \"C:\\Users\\myAccount.Unit\\Favorites\\Downloads\\fiji.app (1)\\fiji.exe\" -macro \"C:\\Users\\myAccount.Unit\\Favorites\\Downloads\\fiji.app (1)\\macros\\FFTBatch.ijm\" C:\\Users\\myAccount.Unit\\Documents\\Untitled001\\"
如果我只使用

string fijiCmdText = string.Format("/C \"{0}\"", _fijiExeFile);
它确实启动了.exe应用程序,但是如果我打算添加宏文件路径,它会失败


这里有什么问题吗?

我发布的链接说明您需要使用/S开关,并将整个命令用引号括起来:

string fijiCmdText = string.Format("/S /C \"\"{0}\" -macro \"{1}\" {2}\"", _fijiExeFile, _ijmFile, _inputDir);
或者更清楚地说:

string fijiCmdText = "/S /C \"<command line that can have quotes>\"";
string fijiCmdText=“/S/C\”\”;

是。永远不要忽略例外情况。至少显示
ex.ToString()
,这样您就可以知道出了什么问题。@johnsaunds它不会进入异常。如果我介入,但它没有命中目标?我会获取
fijiCmdText
的值,然后尝试从实际的命令行运行。我粘贴了fijiCmdText的实际值,我看不到任何错误?是的。是“{0}”前面的“\”解决了整个问题。是否愿意解释一下原因?或者提供一个链接来解释这个问题?非常感谢!!!我认为这意味着删除整个命令行,而不是单独处理它们。