You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#字符串插值中含空格变量的处理及命令传参问题

处理C#字符串插值中含空格变量的命令行参数问题

这个问题我之前也踩过坑!命令行程序(比如net.exe)默认会把空格当成参数的分隔符,所以当你的变量(比如UNC路径、密码)带空格时,必须把整个变量用双引号包裹,不然程序会把空格前后的内容当成不同的参数,自然就运行失败了。

1. 手动给含空格参数添加引号

针对你原来的代码,核心问题就是filePath没有被引号包裹。在C#插值字符串里,要输出双引号需要用\"转义(如果用逐字字符串@"",则用""表示双引号)。修改后的代码如下:

// 注:原代码里的{pwd /USER:{usr}}是笔误,正确写法应该是{pwd} /USER:{usr}
System.Diagnostics.Process.Start("net.exe", $"use X: \"\\\\{filePath}\" \"{pwd}\" /USER:{usr}").WaitForExit();

这里做了两个关键调整:

  • 给filePath加上转义双引号:\"\\\\{filePath}\"(UNC路径的反斜杠本身需要转义,所以用\\\\开头,再用\"包裹整个路径)
  • 如果你的pwd也可能包含空格或特殊字符,同样要用\"{pwd}\"包裹

2. 更安全的方案:使用ProcessStartInfo.ArgumentList

手动处理引号很容易出错(比如参数本身包含双引号的情况),更推荐用ProcessStartInfo的ArgumentList属性,它会自动帮你处理参数的分隔和引号包裹,完全不需要手动转义:

var processStartInfo = new System.Diagnostics.ProcessStartInfo("net.exe")
{
    // 逐个添加参数,每个元素对应一个命令行参数,系统自动处理格式
    ArgumentList = { "use", "X:", filePath, pwd, $"/USER:{usr}" }
};

using var process = System.Diagnostics.Process.Start(processStartInfo);
process.WaitForExit();

这种方式的优势在于:不管参数里有没有空格、特殊字符,系统都会自动生成正确的命令行格式,彻底避免手动拼接字符串的各种坑。

为什么无空格时正常?

当filePath没有空格时,net.exe会把\\ServerName\testfile.txt当成一个完整的路径参数,命令能正常执行;但一旦路径带空格(比如\\ServerName\my test file.txt),net.exe会把\\ServerName\my当成第一个路径参数,test和file.txt当成无效的额外参数,自然就执行失败了。

内容的提问来源于stack exchange,提问作者dguth8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:33:30