在Process.Start参数中传递引号

5
在.NET中,我运行了这一行代码。
var p = Process.Start(@"cmd", @"/C mklink /H c:\z\b c:\z\a\");

这很好运作,不过我担心如果mklink的两个参数有空格,它可能无法正确运行。所以我在两个参数周围加上了""。执行这条命令后不再起作用,而当我写"\"时,它仍然无法工作。
当我执行cmd /C时,如何编写引号?

啊哈,有趣的是,在实现这个之后,数据库中的第一个条目有一个空格(文件夹名称)。 - user34537
你可能想要用引号将整个mklink命令(包括其参数)括起来,然后也要对各个路径进行转义和双重转义。 - isturdy
@isturdy:我不太确定你的意思。除了Robert目前的答案似乎对我不起作用,我也不知道该转义什么。 - user34537
1个回答

4
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 个文件。


1
为什么我要这样写?在带有@前缀的字符串中,"只是""。 - user34537
你还没试过吗?:( 试试吧...它很干净,没有多个引号紧挨在一起让我头炸。 - Robert Harvey
这不就是你让我做的吗?var args = string.Format(@"/C mklink /H ""{0}"" ""{1}""", newfn, target); 但是你似乎建议使用 "text " " 来代替我当前所做的添加引号的方法。 - user34537
我非常确定{0}@literal语法不兼容。 - Robert Harvey
其实也许它是可以工作的。可能是权限问题。Visual Studio没有与我相同的权限,尽管我确定不需要管理员权限。我刚刚检查了标准错误。 - user34537
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接