如何使用WriteLine输出反斜杠,通过StreamWriter将robocopy命令写入文件
问题根因
在C#等主流编程语言中,\ 是默认的字符串转义字符,单独使用时会被编译器识别为特殊转义序列的开头(例如\t会被解析为制表符,而非你需要的\加t的原始字符),因此直接写入包含单个\的字符串时会出现解析错误,和预期写入内容不符甚至抛出异常。
可行解决方法
有两种常用的无错写入方案:
- 方案1:手动转义所有反斜杠
把字符串中每个需要原样保留的\替换为\\,同时字符串内部的双引号需要加\转义,示例代码如下:// 转义后的命令字符串 string robocopyCmd = "robocopy \"\\\\tsclient\\A\\Steam\\steamapps\\common\\Arma 3!Workshop@RHSAFRF\" \"D:\\A3_S4@RHSAFRF\" /MIR /R:0 /W:0 /COPY:DAT"; // 写入文件 using (StreamWriter sw = new StreamWriter("你的目标文件路径.bat")) { sw.WriteLine(robocopyCmd); } - 方案2:使用逐字字符串(更推荐,适合路径类多反斜杠场景)
在字符串开头加@标记为逐字字符串,编译器会忽略\的转义含义,仅需要把字符串内部的双引号替换为两个连续双引号转义即可,不需要修改所有反斜杠,示例代码如下:// 逐字字符串定义命令 string robocopyCmd = @"robocopy ""\\tsclient\A\Steam\steamapps\common\Arma 3!Workshop@RHSAFRF"" ""D:\A3_S4@RHSAFRF"" /MIR /R:0 /W:0 /COPY:DAT"; // 写入文件 using (StreamWriter sw = new StreamWriter(@"你的目标文件路径.bat")) { sw.WriteLine(robocopyCmd); }
以上两种方案写入文件后,生成的内容和你需要的原始robocopy命令完全一致,不会出现字符转义导致的内容错误。
内容的提问来源于stack exchange,提问作者Hauzman
相关产品推荐
相关产品推荐

