Использование "% ~ dp0" с аргументами командной строки не работает

5090
Alex Pilon

Создается сценарий развертывания для программного обеспечения, для которого требуется установить распространяемый Visual C ++ 2013 в режиме без вывода сообщений из движущегося источника (иначе папка может находиться на ключе, на сервере, локально и т. Д.) В качестве администратора.

Для всех других моих исполняемых файлов (в основном MSI) использование «% ~ dp0» перед именем файла (например, «% ~ dp0Antidote9.msi», за которым следуют такие аргументы, как / quiet, / q и т. Д.), Работает нормально.

Но для VC Redist он не принимает мои аргументы.

Вот моя полная команда:

start /wait "%~dp0vcredist_x64.exe" /install /quiet /norestart 

Он отлично тянет файл, но затем говорит, что мои аргументы недействительны, даже если я удаляю% ~ dp0, он работает нормально, и я получил аргументы от выполнения vcredist_x64.exe / ?.

Есть ли что-то, что я делаю неправильно или что мне нужно изменить, чтобы мои аргументы работали?

Заранее спасибо!

1

1 ответ на вопрос

2
Vassile

Вы могли бы использовать, %CD%\который обозначает Текущий каталог вместо %~dp0.

Я не заметил никакой разницы между этими двумя.

На заметку о том, что вы использовали startкоманду, рекомендуется добавлять дополнительные ""перед запуском программы и включать все параметры в одну кавычку, а также при необходимости экранировать кавычки. Пример:

start /wait "" "%CD%\MyProgram.exe /link \"MyOtherDLL.dll\"" 
Привет! % CD% не работает. Причина, по которой я использую% ~ dp0, заключается в том, что ему нужно найти путь к файлу CMD, поскольку он будет запускаться от имени администратора. Если я использую% CD%, он вытягивает C: \ Windows \ system32. Alex Pilon 8 лет назад 0
@AlexPilon Попробуйте добавить \ (обратную косую черту), обозначающий конец пути после `% ~ dp0`, затем продолжите выполнение исполняемой программы. Также вы пытались добавить дополнительные "" "`? По синтаксису `start` принимает первый параметр в качестве заголовка окна (вероятно, для старой программы в стиле DOS), а второй параметр - в качестве пути к исполняемому файлу (и соответствующие аргументы для этой конкретной программы, включенные в ту же кавычку, с правильно экранированными под кавычками) , Vassile 8 лет назад 0
На самом деле, я редактировал свой комментарий как раз перед тем, как ты написал. Я нашел способ сделать это, с твоей помощью. Добавление лишних "" в начале сделало свое дело. Если бы я добавил весь путь и аргументы в кавычках, он бы рассматривал путь и аргументы как имя файла. Итак, моя последняя строка: start / wait "" "% ~ dp0vcredist_x64.exe" / install / quiet / norestart И все работает отлично! Спасибо за вашу помощь :) Alex Pilon 8 лет назад 0
@AlexPilon Круто. Вы также помогли мне прояснить различия между ними. Vassile 8 лет назад 0