2

尝试使用下面的代码来使用 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();
4

4 回答 4

4

您需要使用\"

"\"C:\\Program Files\\McAfee\\Common Framework\\cmdagent.exe\" /p");
于 2013-07-22T15:01:26.933 回答
4

我认为,使用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))
    ...
于 2013-07-22T15:11:38.407 回答
1

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

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();
    }
}

批处理文件中的输出:

C:\\temp\\framepkg.exe /install=agent /silent
"C:\PRogram Files\McAfee\Common Framework\cmdagent.exe /p"
于 2013-07-22T15:07:35.683 回答
0

这就是答案: w.WriteLine(@"C:\...")

您只需要一个“\”,因为您使用“@”符号对其进行转义。

于 2015-06-02T15:40:53.533 回答