我正在使用2012 Desktop Express。我正在将几个程序从VB.NET转换为C#。这个问题现在占据了我的3个项目。我做了几乎无穷无尽的搜索,并且有很多文章,但是没有一个文章和变量组合起来创建一个新的字符串。
所以我以多种方式尝试了@符号,Path.Combine和其他几个。每一种方式要么让我在我的字符串中没有引号,要么留下额外的转义字符,ROBOCOPY吐出错误。这是我最有前途的工作:
我需要:“G:\ 2016 DPRoberts”
string sBAK_Folder = "\"" + sBAK_Drive + ":\\" + DateTime.Now.ToString("yyyy") + " " + Environment.UserName + "\"";
输出:“\”G:\ 2016 DPRoberts \“”
string sBAK_Folder = Path.Combine(sBAK_Drive + ":\\" + DateTime.Now.ToString("yyyy") + " " + Environment.UserName);
输出:G:\ 2016 DPRoberts
string sBAK_Folder =(char)34 + sBAK_Drive + ":\\" + DateTime.Now.ToString("yyyy") + " " + Environment.UserName + (char)34;
输出:“\”G:\ 2016 DPRoberts \“”
感谢您的考虑, :} DPRoberts
EDIT1: 谢谢你的回复。我会尝试添加更多细节。这是我点击的标签的代码:这是我的VB代码的直接翻译,所以我可能在那时搞砸了。
// string sBAK_Folder = "\"" + sBAK_Drive + ":\\" + DateTime.Now.ToString("yyyy") + " " + Environment.UserName + "\"";
// string sBAK_Folder = Path.Combine(sBAK_Drive + ":\\" + DateTime.Now.ToString("yyyy") + " " + Environment.UserName);
string sUser_Folder = (char)34 + System.Environment.GetEnvironmentVariable("USERPROFILE") + (char)34;
string sBAK_Folder = (char)34 + sBAK_Drive + ":\\" + DateTime.Now.ToString("yyyy") + " " + Environment.UserName + (char)34;
Directory.CreateDirectory(sBAK_Folder);
Process.Start("ROBOCOPY.exe", sUser_Folder + " " + sBAK_Folder + " /e /r:0 /w:0");
上面列出的每种格式都会给我一个来自ROBOCOPY的无效源文件夹。
因此,为了调试问题,我创建了一个包含2行的批处理文件:
ECHO%1
PAUSE
所以,当我尝试使用我试过的3个例子中的每一个时:
Process.Start("D:\\Temp\\BAK.cmd", sBAK_Folder);
我得到了上面列出的3个输出,所以我的推理理由是它不喜欢转义字符或空格,如果我能找到像我在VB中发送双引号的方法,这些就会得到解决(我只是在每一端都放了一个chr(34))我已经为50多个用户使用了这个程序大约4年了。
谢谢你, :} DPRoberts
答案 0 :(得分:-1)
我不确定你说的是什么意思:output: "\"G:\2016 DPRoberts\""
您所拥有的额外"
是因为您正在观看的是一个字符串,并且VS中的所有字符串都会围绕它们"
,所以首先&第三个例子给你你想要的东西。
当你传递字符串时,它不应该有它们。
更重要的是,如果你还需要它们,可以考虑简单地从你的字符串中砍掉第一个和最后一个字符。
var v = "some string";
var cut = v.Substring(1,v.Length-2);