Использование Writeline для создания командного файла

Попытка использовать код ниже, чтобы использовать 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 ответа

Вам нужно избежать лишних кавычек с \"

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

ВЫХОД в пакетном файле:

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

Это ответ: w.WriteLine(@"C:\...")

вам нужен только один "\", так как вы экранируете его символом "@".

Другие вопросы по тегам