使用Writeline创建批处理文件

本文关键字:批处理文件 创建 Writeline 使用 | 更新日期: 2023-09-27 18:24:19

尝试使用下面的代码使用writeline创建批处理文件。但是,由于文件路径中存在空格,第三行似乎不会在批处理文件中运行。我试图将其包含在"中,但这会产生6个新错误。谢谢,我是新手,只是想弄清楚一些道理。在网上搜索后,他们似乎找不到解决方案。

StreamWriter w = new StreamWriter(@"C:'temp'InstallAgent.bat");
w.WriteLine("C:''temp''framepkg.exe /install=agent /silent");
w.WriteLine("C:''PRogram Files''McAfee''Common Framework''cmdagent.exe /p");
w.Close();

使用Writeline创建批处理文件

您需要用'" 转义多余的引号

"'"C:''Program Files''McAfee''Common Framework''cmdagent.exe'" /p");

我认为,使用Path.Combine是最安全的方法,不用担心在路径中转义空格和斜杠。

例如

var myBatFilePath = Path.Combine("C:", "temp", "InstallAgent.bat");
var framepkgExe = Path.Combine("C:", "temp", "framepkg.exe");
var cmdAgentExe = Path.Combine("C:", "Program Files", "McAfee", "Common Framework", "cmdagent.exe");

StreamWriter w = new Streamwriter(myBatFilePath);
w.WriteLine(framepkgExe + " /silent");
w.WriteLine(cmdAgentExe + " /p");
w.CLose();

不管怎样。。。将文件的路径放在var中将有助于以后添加错误处理。。。(也许您不应该等待添加)。我想问你为什么要写一个批处理文件,而不是只管理C#代码的执行。。。但你没有问。:-)

例如

if (File.Exists(framepkgExe))
    ...

您需要在文件中写引号。这样做:

string path = Path.Combine(Application.StartupPath, "test.bat");
if (File.Exists(path))
{
    File.Delete(path);
    using (StreamWriter w = new StreamWriter(path))
    {
        w.WriteLine(@"C:''temp''framepkg.exe /install=agent /silent");
        w.WriteLine("'"C:''PRogram Files''McAfee''Common Framework''cmdagent.exe /p'"");
        w.Close();
    }
}

OUTPUT在批处理文件中:

C:''temp''framepkg.exe /install=agent /silent
"C:'PRogram Files'McAfee'Common Framework'cmdagent.exe /p"

这是答案:w.WriteLine(@"C:''…")

您只需要一个"''",因为您用"@"符号来转义它。