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\
其中"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
时为fijiCmdText
观察到的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 \" \"";