创建并运行包含特殊字符作为重音的批处理文件

时间:2015-04-17 01:02:48

标签: c# batch-file character-encoding

我正在从我的C#应用​​程序创建一个批处理文件。 (例如,路径包含重音符号)

using (System.IO.StreamWriter file = new System.IO.StreamWriter("file.bat", false))
{
    var path = "C:\directory_été"; 
    var whoot = @"@echo off" + Environment.NewLine + @"pushd %~dp0" + Environment.NewLine + path; // where path contains accents and such
    file.Write(whoot);
}

使用notepad.exe打开.bat文件时,一切看起来都很完美。 然后我的应用程序正在运行批处理。

var Info = new ProcessStartInfo();
Info.Arguments = "/C choice /C Y /N /D Y /T 3 & start /b \"myBatchTitle\" \"C:\\file.bat\"";
Info.WindowStyle = ProcessWindowStyle.Hidden;
Info.CreateNoWindow = true;
Info.FileName = "cmd.exe";
Process.Start(Info);

批处理返回错误,因为它没有找到“路径”,因为它将重音更改为一些乱码。 所以,.bat本身的一切看起来都不错,但是在运行它时,它无法正确读取编码原因。(当批处理运行时路径回显为“directory_ÚtÚ”,我甚至无法从cmd提示符复制Ú导致其打印正确然后大声笑)

我该如何解决这个问题? (而不是逐个手动更改字符) 或者有没有办法将C#中的字符串编码为OEM,以便正确读取? (示例已将é改为Ú,对于所有字符)

(有关更多信息,创建的批处理文件正在运行7zip命令行版本,我提交给它的路径包含重音符号等)

另外,您是否知道任何便携式命令行替代方案,接受真正的UTF8编码以便接受这些语言?

1 个答案:

答案 0 :(得分:0)

我不知道C:\directory_été的相应代码页是什么(也许你这样做,因为你正在处理这个文件)。您可以尝试使用代码页863,这是加拿大法语。

在任何情况下,如果您知道代码页,则可以尝试通过chchp xxx更改代码页,其中xxx是标识您要切换到的代码页的数字。所以你可以试试chcp 863。在使用带重音的路径之前,可以将其放在批处理文件中。