используя команду запуска DOS, когда переданные аргументы имеют кавычки - PullRequest
4 голосов
/ 14 февраля 2012

У меня вопрос по команде запуска DOS.Я уже читал эту тему: Использование команды «Пуск» в DOS с параметрами, переданными в запущенную программу Использование команды «Пуск» с параметрами, переданными в запущенную программу

, но мой вопроснемного по-другому.

У меня проблема: мне нужно передать пути, которые должны быть заключены в кавычки.

Например, если путь не имеет кавычек, это прекрасно работает:

start "" app.exe -option c: \ myapp \ myfile.txt

, но если путь содержит двойные кавычки, он не работает.

У меня есть эта строка в моем файле BATCH:

start "" myapp.exe -option% mypath%

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

Спасибо Сандро

Ответы [ 2 ]

3 голосов
/ 18 апреля 2012

Обычно это не проблема использовать параметры с кавычками, но у вас возникают проблемы, если ваш путь к приложению также содержит кавычки.

Затем вам нужно добавить дополнительный оператор CALL.

start "" app.exe -option c:\myapp\myfile.txt    - Works
start "" app.exe -option "c:\myapp\myfile.txt"    - Works
start "" "app.exe" -option c:\myapp\myfile.txt    - Works

start "" "app.exe" -option "c:\myapp\myfile.txt"    - Don't works
start "" CALL "app.exe" -option "c:\myapp\myfile.txt"    - Works
1 голос
/ 18 апреля 2012

Это может помочь, но это метод немного о и может потребоваться небольшое изменение, чтобы удовлетворить ваши потребности.

Идея состоит в том, чтобы:

  1. Вывести переменную среды, в которой есть кавычки, в текстовый файл с предопределенным именем. Например: "set mypath2> withQt.bat"
  2. Используйте Windows Power Shell или какой-либо сторонний инструмент для поиска и замены кавычек в этом файле.
  3. Создать еще один текстовый файл (только один временной шаг), содержащий строку «Установить»
  4. Используйте команду copy, чтобы добавить файл, упомянутый в шаге 2, к файлу, созданному в шаге 3, и создать командный файл с предварительно определенным именем. Как: скопировать base.bat + withQt.bat withtqt.bat
  5. Запустить пакетный файл, который создает другую / заменяет переменную среды значением без кавычек.

Извините, я не мог получить что-то более элегантное в это время.

...