Использование 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:\...")
вам нужен только один "\", так как вы экранируете его символом "@".