命令行使用string.Format()来处理转义字符

时间:2014-05-14 21:32:31

标签: c# string command-line escaping string-formatting

感谢您阅读我的帖子。

这是我想在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#代码运行这个命令行,所以有转义字符问题我不知道如何处理

有两个字符串我想让它们变得灵活

  1. d:\斐济-Win64的\ Fiji.app \ ImageJ的-win64.exe

  2. d:\输出\ Untitiled032 \ ChanA_0001_0001_0001_0001.tif

  3. 我想知道如何使用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。有人有什么建议吗?这真的很令人困惑。非常感谢。

2 个答案:

答案 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);