如何构建一个可以被ROBOCOPY或其他人使用的路径(包含空格)?

时间:2016-04-09 02:05:20

标签: c#

我正在使用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

1 个答案:

答案 0 :(得分:-1)

我不确定你说的是什么意思:output: "\"G:\2016 DPRoberts\"" 您所拥有的额外"是因为您正在观看的是一个字符串,并且VS中的所有字符串都会围绕它们",所以首先&第三个例子给你你想要的东西。

当你传递字符串时,它不应该有它们。

更重要的是,如果你还需要它们,可以考虑简单地从你的字符串中砍掉第一个和最后一个字符。

var v = "some string";
var cut = v.Substring(1,v.Length-2);