#batch-file
#пакетный файл
Вопрос:
Я пытаюсь передать параметры из консольного приложения .Net в пакетный файл. Параметры не поступают в пакетный файл.
Как я могу правильно настроить передачу параметров в файл bat?
Вот метод в консольном приложении, который я выполняю.
private static int ProcessBatFile(string ifldr, string ofldr, string iext, string oext, Int16 filewidth, Int16 fileheight, Int16 ctr)
{
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = ConfigurationSettings.AppSettings.Get("BatProcessDir") "imagemagick.bat";
psi.Arguments = "-ifldr=" ifldr " -ofldr=" ofldr " -iext=" iext " -oext=" oext " -iwid=" filewidth " -ihgt=" fileheight;
psi.UseShellExecute = false;
Process process = new Process();
process.StartInfo = psi;
process.Start();
return ctr;
}
Ниже приведен код в bat-файле, который я пытаюсь выполнить:
@echo on
echo %ofldr%
echo %ifldr%
echo %iwid%
echo %ihgt%
echo %oext%
echo %iext%
Ответ №1:
Если вы передаете их как параметры, вы можете сделать это в коде c #:
psi.Arguments = ifldr " " ofldr " " iext " " oext " " filewidth " " fileheight;
и сделайте это в пакетном файле:
@echo on
set ifldr=%1
set ofldr=%2
set iext=%3
set oext=%4
set iwid=%5
set ihgt=%6
echo %ofldr%
echo %ifldr%
echo %iwid%
echo %ihgt%
echo %oext%
echo %iext%
В качестве альтернативного решения вы также можете напрямую изменять среду перед выполнением пакетного файла с помощью System.Environment.SetEnvironmentVariable
:
System.Environment.SetEnvironmentVariable ("ifldr", ifldr);
....
Это вызывает меньше проблем, если параметры могут содержать пробелы.