Включить пакетный файл в пакетный файл - PullRequest
5 голосов
/ 29 сентября 2010

У меня проблема с вызовом командного файла из другого командного файла при попытке запустить все с помощью Process.Start.По сути, я вызываю выполнение командного файла из моей программы на c #, который выглядит следующим образом:


call include.bat  

//execute the rest of the batch file here  

Файл include.bat устанавливает пути и может использоваться рядом других пакетных файлов.Когда я запускаю Process.Start, иногда это работает, а иногда я получаю ERROR: cannot find include.bat.Прежде всего, есть идеи, почему это происходит?А идеи как это исправить из командного файла?

Ответы [ 5 ]

6 голосов
/ 29 сентября 2010

Чтобы переключиться в каталог, в котором находится ваш пакетный файл, используйте это:

cd %~dp0

Я делаю это почти во всех моих пакетных сценариях.Таким образом, относительные пути всегда должны работать.

2 голосов
/ 10 июня 2012

Перед сценарием попробуйте CD /D %~dp0

1 голос
/ 27 сентября 2012

Я знаю, что это старый вопрос, но я подумал, что стоит отметить, что подход, основанный на принятом ответе (т. Е. Изменение рабочего каталога), не всегда может быть подходящим.

Лучший общий подход - ссылаться на зависимости по полному пути:

call "%~dp0include.bat"

(Поскольку% ~ dp0 уже заканчивается обратной косой чертой, нам не нужно добавлять еще одну.)

Вот некоторые преимущества , а не изменения рабочего каталога:

  1. Остальной пакетный файл все еще может использовать исходный рабочий каталог.
  2. Исходный рабочий каталог в командной строке сохраняется даже без «SETLOCAL».
  3. Если первый пакетный файл запускается по пути UNC (например, "\\ server \ share \ file.bat"), вызов полного пути будет успешным при изменении каталога (даже при использовании "cd / d ") потерпит неудачу . (Использование pushd / popd решило бы эту проблему, но у них есть свои проблемы.)

Эти преимущества особенно важны для пакетных файлов псевдонима, даже если они не так важны для конкретной ситуации, которая мотивировала этот вопрос.

1 голос
/ 29 сентября 2010

Устанавливаете ли вы ProcessStartInfo.WorkingDirectory (http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx) в ProcessStartInfo, передаваемом в Process.Start?

Поскольку иногда include.bat не удается найти, рабочий каталог может быть неправильным (папка, в которой находится файл include.bat).

1 голос
/ 29 сентября 2010

Во-первых, я бы попытался использовать полную информацию о пути в операторе вызова для include.bat. Если это исправит это, вы, вероятно, просто не запускаете командный файл из правильного местоположения. Я уверен, что в C # есть возможность «рабочего каталога», я просто не уверен, что это такое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...