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

如何在C#中使用PowerShell.AddCommand("Set-Content")添加换行符?

问题:使用PowerShell的Set-Content写入换行符失效

我通过C#拼接字符串列表为带\n分隔的字符串,再用PowerShell的Set-Content写入文件,但结果所有字符串连在一起,没有换行。

原代码

拼接字符串的代码:

List<string> list = new List<string>();
list.Add("string1");
list.Add("string2");
list.Add("string3");

string stringOfListContents = string.Join("\n", list);

写入文件的代码:

using (PowerShell PowerShellInstance = PowerShell.Create())
{
    PowerShellInstance.Streams.ClearStreams();
    PowerShellInstance.AddCommand("Set-Content");

    PowerShellInstance.AddParameter("Path", outputFile);
    PowerShellInstance.AddParameter("Value", stringOfListContents);

    PowerShellInstance.Invoke();
}

实际结果

string1string2string3

期望结果

string1
string2
string3

解决方案

方案1:直接传递字符串列表给Set-Content(推荐)

不需要手动拼接换行符,直接将字符串列表作为Value参数传递给Set-Content,PowerShell会自动将每个元素写入单独一行,并添加系统默认的换行符。

修改后的代码:

List<string> list = new List<string>();
list.Add("string1");
list.Add("string2");
list.Add("string3");

using (PowerShell PowerShellInstance = PowerShell.Create())
{
    PowerShellInstance.Streams.ClearStreams();
    PowerShellInstance.AddCommand("Set-Content");

    PowerShellInstance.AddParameter("Path", outputFile);
    // 直接传入列表,而非拼接后的字符串
    PowerShellInstance.AddParameter("Value", list);

    PowerShellInstance.Invoke();
}

方案2:使用系统默认换行符拼接字符串

如果必须手动拼接,用Environment.NewLine代替"\n",它会根据操作系统自动生成正确的换行符(Windows为\r\n,Linux/macOS为\n),确保换行符被文件编辑器正确识别。

修改后的拼接代码:

string stringOfListContents = string.Join(Environment.NewLine, list);

原因说明

  1. 直接传递列表的优势:Set-Content的Value参数支持接收集合类型,当传入字符串列表时,会自动遍历每个元素并写入单独一行,无需手动处理换行符,这是PowerShell设计的原生行为,最可靠。
  2. 换行符兼容性问题:手动使用"\n"(仅LF)在Windows系统中,部分文本编辑器(如记事本)无法识别为换行,而Environment.NewLine会生成符合系统规范的换行符,避免兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:28:17