【问题标题】:Passing quotes in Process.Start arguments在 Process.Start 参数中传递引号
【发布时间】:2012-11-30 22:16:57
【问题描述】:

在 .NET 中我正在运行这一行

var p = Process.Start(@"cmd", @"/C mklink /H c:\z\b c:\z\a\");

这一切都很好,但是我担心如果 mklink 的两个 args 之一有一个空间,这将无法正常工作。所以我在两个参数周围添加了“”。执行此行不再有效,当我写 \"" 时它仍然无效。

在执行cmd /C时如何写引号?

【问题讨论】:

  • 啊哈哈好笑,在实现这个之后,数据库中的第一个条目有一个空格(文件夹名称)。
  • 您可能希望用引号将整个 mklink 命令(及其参数)括起来,然后还包括各个路径(根据需要进行转义和双重转义)。
  • @isturdy:我不太清楚你的意思。除了罗伯茨当前的答案似乎对我不起作用之外,我不完全知道要逃避什么

标签: .net batch-file


【解决方案1】:
string sourcePath = @"c:\z\b";
string targetPath = @"c:\z\a";

string arguments = string.Format("\"{0}\" \"{1}\"", sourcePath, targetPath);

var p = Process.Start("cmd", "/C mklink /H " + arguments);

工作示例:

string sourcePath = @"c:\documents and settings\harvey robert\My Documents\Test.txt";
string targetPath = @"c:\test";

string s = string.Format("\"{0}\" \"{1}\"", sourcePath, targetPath);
Process.Start("cmd", @"/c copy " + s);

已复制 1 个文件。

【讨论】:

  • 我没有尝试过,但它看起来不正确。我写了@"/C mklink /H ""{0}"" ""{1}""" 得到一个语法不正确的错误
  • 你写的那行不行; @ 符号禁用 \ 转义。试试var p = Process.Start(@"cmd", @"/C mklink /H " + "\"" + @"c:\z\b" + "\" \" " + @"c:\z\a\" + "\"");
  • 我为什么要这样写? \" 在带有 @ 前缀的字符串中时就是 ""
  • 你没试过吗? :( 试试看...它很干净,并且没有多个引号一起运行使我的头不会爆炸。
  • 这不是你要我做的吗? var args = string.Format(@"/C mklink /H ""{0}"" ""{1}""", newfn, target); 但您似乎建议使用 "text \" " 而不是像我目前所做的那样添加引号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
相关资源
最近更新 更多