带有转义字符的字符串格式

时间:2014-04-30 19:25:41

标签: c# string format escaping

非常感谢您阅读我的帖子。我有一个命令行,我想在C#中格式化为一个字符串。以下是字符串在命令行提示符中的显示方式:

enter image description here

我想我只需要知道从run.......开始的格式,我想我可以处理fiji -eval 所以这就是我不能格式化的内容: enter image description here

如果你看不清楚,我在这里重新输入字符串:

run("'Bio-Formats Importer'", "'open=[D:\\fiji\\ChanA_0001_0001_0001_0001.tif] display_ome-xml'")

令我感到困惑的是“内部”,我对此并不自信。任何人都知道如何格式化此命令行?非常感谢!

进一步编辑以将其扩展为动态:

string fileName = string.Empty;
string[] filesList = System.IO.Directory.GetFiles(folder, "*.tif");
fileName = filesList[0];

string bioformats = "Bio-Formats Importer";

options = string.Format("open=[{0}] display_ome-xml", fileName);
runCommand = string.Format("run(\"'{0}'\",\"'{1}'\")", bioformats, options);

 string fijiCmdText = string.Format("/C \"\"{0}\" -eval {1}", fijiExeFile, runCommand);

 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)
      {
          ex.ToString();
           ret = 0;
     }

2 个答案:

答案 0 :(得分:3)

您可以使用普通的字符串文字,但是您必须使用\"\\的反斜杠转义引号,如下所示:

var str = "run(\"'Bio-Formats Importer'\",\"'open=[D:\\\\fiji\\\\ChanA_0001_0001_0001_0001.tif] display_ome-xml'\")";

或者使用逐字字符串文字,但您需要使用""转义引号,如下所示:

var str = @"run(""'Bio-Formats Importer'"",""'open=[D:\\fiji\\ChanA_0001_0001_0001_0001.tif] display_ome-xml'"")";

进一步阅读


关于您的更新,似乎问题是您需要在文件路径中加倍斜杠才能获得命令行字符串的好处。我还建议将其简化为:

using System.IO;
using System.Diagnostics;

var filesList = Directory.GetFiles(folder, "*.tif");
var bioformats = "Bio-Formats Importer";
foreach(var fileName in filesList)  // loop through every file
{
    var options = string.Format("open=[{0}] display_ome-xml", fileName.Replace("\\", "\\\\"));
    var args = string.Format("-eval run(\"'{0}'\",\"'{1}'\")", bioformats, options);
    try
    {
        var process = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                WindowStyle = ProcessWindowStyle.Hidden,
                FileName = fijiExeFile,
                Arguments = args,
            }
        };
        process.Start();
        process.WaitForExit();

        ret = 1;
    }
    catch (Exception ex)
    {
        ex.ToString();
        ret = 0;
    }
}

答案 1 :(得分:1)

要逃避,请使用\。例如,"run(\"'Bio-Formats Importer'\""。对于\个字符,请使用\\,或者使用\\\\

您还可以使用string.Format()对此进行参数化:string.Format("run(\"'{0}'\", ...", arg0);