感谢您阅读我的帖子。
这是我想在C#代码中调用的命令行:
C:\>"D:\fiji-win64\Fiji.app\ImageJ-win64.exe" -eval "run('Bio-Formats','open=D:\\Output\\Untitiled032\\ChanA_0001_0001_0001_0001.tif display_ome-xml')"
这是我从控制台窗口可以看到的确切命令,它运行并提供我需要的东西。我想从我的C#代码运行这个命令行,所以有转义字符问题我不知道如何处理
有两个字符串我想让它们变得灵活
d:\斐济-Win64的\ Fiji.app \ ImageJ的-win64.exe
d:\输出\ Untitiled032 \ ChanA_0001_0001_0001_0001.tif
我想知道如何使用string.Format()
来制定此命令行?
这是我当前的代码,它会打开图片,但display_ome-xml
没有被调用:
string bioformats = "Bio-Formats";
string options = string.Format("open={0} display_ome-xml", fileName.Replace("\\", "\\\\"));
string runCommand = string.Format("run(\"'{0}'\",\"'{1}'\")", bioformats, options);
string fijiCmdText = string.Format("/C \"\"{0}\" -eval {1}", fijiExeFile, runCommand);
其中fijiExeFile
处理鳍,只是runCommand
一直忽略display_ome-xml
。有人有什么建议吗?这真的很令人困惑。非常感谢。
答案 0 :(得分:1)
最简单的方法是使用逐字字符串文字。 只需在你的字符串前放一个@:
@"c:\abcd\efgh"
这将禁用反斜杠转义字符
如果你需要“在你的字符串中,你将不得不逃避引号,如下:
@"c:\abcd\efgh.exe ""param1"""
你的例子可能是:
String.Format(@"""{0}"" -eval ""run('Bio-Formats','open={1} display_ome-xml')""", @"D:\fiji-win64\Fiji.app\ImageJ-win64.exe", @"D:\Output\Untitiled032\ChanA_0001_0001_0001_0001.tif")
或
string p1 = "D:\\fiji-win64\\Fiji.app\\ImageJ-win64.exe";
string p2 = "D:\\Output\\Untitiled032\\ChanA_0001_0001_0001_0001.tif";
String.Format(@"""{0}"" -eval ""run('Bio-Formats','open={1} display_ome-xml')""", p1, p2);
答案 1 :(得分:1)
正如@Kristian指出的那样,@
可以在这里提供帮助。看来上面的代码中可能还有一些额外的或错误的\"
。这似乎给出了所需的输出字符串:
string fijiExeFile = @"D:\fiji-win64\Fiji.app\ImageJ-win64.exe";
string fileName = @"D:\\Output\\Untitiled032\\ChanA_0001_0001_0001_0001.tif";
string bioformats = "Bio-Formats";
string options = string.Format("open={0} display_ome-xml", fileName);
string runCommand = string.Format("run('{0}','{1}')", bioformats, options);
string fijiCmdText = string.Format("\"{0}\" -eval \"{1}\"", fijiExeFile, runCommand);