Изменить текущий каталог на каталог пакетных файлов

18

У меня есть batфайл на окнах, которые выполняют операцию procdump . Проблема с командным файлом заключается в том, что мне нужно сначала перейти в каталог командного файла перед выполнением задания, иначе сценарий не будет работать.

Как перейти в текущий каталог с пакетными файлами?

Я попробовал следующий код в моем procdump.bat:

cd "%~dp"
procdump -h devenv.exe mydump.txt

Но это не удалось, сообщение об ошибке:

Следующее использование оператора пути в подстановке пакетных параметров недопустимо:% ~ dp "

Для допустимых форматов введите CALL /? или ЗА /?

Редактировать: предоставленный ответ работает, но есть только одна загвоздка: если мой текущий каталог отличается от каталога пакетного файла, то я получу «Система не может найти указанный путь». У кого-нибудь есть идеи?

Гравитон
источник
Откуда у вас этот "% ~ dp"?
fretje

Ответы:

24

Хорошо, я думаю, что нашел здесь то, что вы имеете в виду %~dp.

Я думаю, что вы действительно хотите сделать, это:

cd /D "%~dp0"

(!) Но учтите, что это все равно не даст вам правильного поведения, когда вы пытаетесь выполнить свой пакет, пока текущий каталог находится на другом диске, поскольку cdэто не меняет активный диск.

Редактировать : Очевидно (спасибо @Yoopergeek ) вы можете добавить /Dпараметр в cdкоманду, чтобы позволить ему также изменить активный диск.

fretje
источник
Для получения более подробной информации об этих пакетных параметрах см help callв cmdстроке.
Приостановлено до дальнейшего уведомления.
Кстати, вы можете объединить эти параметры следующим образом:%~dp0
Приостановлено до дальнейшего уведомления.
Ваш ответ полезен; но если мой текущий каталог находится в другом каталоге, чем командный файл, то приведенная выше команда не будет выполнена; даже cd /Dили cd "%~dp0" /Dне могу помочь.
Гравитон
@Ngu Скоро Хуэй: То, что ваш текущий каталог находится в другом каталоге, чем командный файл, было очевидно. Но почему эта команда потерпит неудачу? Я проверил это здесь, и это работает.
fretje
1
Я нашел решение с помощью cd /D "%~dp0". Благодарю.
Гравитон
4

Я бы оставил комментарий к ответу Фретье, но, очевидно, я не могу ???


В любом случае, что касается примечания:
Но учтите, что это все равно не даст вам правильного поведения, когда вы пытаетесь выполнить пакет, когда текущий каталог находится на другом диске, так как cd не меняет активный диск.


Используйте /Dпереключатель в вашей команде CD, и CD изменит активный привод.

Yoopergeek
источник
... все же я могу прокомментировать свой собственный ответ. Чувак, отстой, что у меня нет повторений на ServerFault ... Желаю, чтобы некоторые SO повторяли это.
Yoopergeek
1
@Yoopergeek: вы можете связать свои учетные записи. Это даст вам 100 повторений здесь, если ваш повтор на SO выше 200.
fretje