如何在带有空格的文件夹名称周围使用双引号

本文关键字:周围使 文件夹 空格 | 更新日期: 2023-09-27 18:29:43

这是我的代码

string path1 = @"C:'Program Files (x86)'Common Files";
string path2 = @"Microsoft Shared";
string path = Path.Combine(path1, path2);
Console.WriteLine(path);

输出为我提供

C: ''Program Files(x86)''Common Files''Microsoft Shared

我想要任何带有空格的文件夹名称,如所示

C: ''"程序文件(x86)"''"通用文件"''"Microsoft Shared"

我怎么能拿到?

如何在带有空格的文件夹名称周围使用双引号

最简单的方法是使用LINQ。

您可以将文件夹路径拆分为一个列出所有文件夹名称的数组,然后使用Select()操作每个单独的元素。

在你的情况下,你会想:

  1. 将字符串拆分为数组(使用"/"分隔元素)
  2. 如果文件夹名称包含空格,则将文件夹名称格式化为"{folderName}"
  3. 将数组重新组合为单个字符串,并使用"/"作为分隔符

这是它的样子,请注意,为了清晰起见,我使用了2个Select();以帮助识别不同的步骤。它们可以是一个单独的语句。

        string path1 = @"C:'Program Files (x86)'Common Files";
        string path2 = @"Microsoft Shared";
        string path = System.IO.Path.Combine(path1, path2);
        var folderNames = path.Split('''');
        folderNames = folderNames.Select(fn => (fn.Contains(' ')) ? String.Format("'"{0}'"", fn) : fn)
                                 .ToArray();
        var fullPathWithQuotes = String.Join("''", folderNames);

上述过程的输出为:

C: ''"程序文件(x86)"''"通用文件"''"Microsoft Shared"

您可以创建一个扩展方法

public static class Ex
{
    public static string PathForBatchFile(this string input)
    {
        return input.Contains(" ") ? $"'"{input}'"" : input;
    }
}

像一样使用它

var path = @"C:'Program Files (x86)'Common Files'Microsoft Shared";
Console.WriteLine(path.PathForBatchFile());

它使用C#6.0中的字符串插值功能。如果您没有使用C#6.0,您可以使用它。

public static class Ex
{
    public static string PathForBatchFile(this string input)
    {
        return input.Contains(" ") ? string.Format("'"{0}'"", input) : input;
    }
}