Как запустить программу Windows с пробелами в пути от Perl? - PullRequest
2 голосов
/ 15 апреля 2011

Если я сделаю:

my program = "C:\\MyPath\\MyProg.exe";
system(("start", $program));

MyProg запускается очень хорошо, и мой сценарий возобновляется после команды system (). Но если на пути есть пробелы типа

my program = "C:\\My Path\\MyProg.exe";
system(("start", $program));

Кажется, что запускается cmd, а не MyProg.

Я пытался цитировать с такими вещами, как:

my program = "C:\\My Path\\MyProg.exe";
system(("start", '"' . $program . '"'));

Но, похоже, ничто не поможет.

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

Ответы [ 3 ]

3 голосов
/ 15 апреля 2011

Это потому, что встроенная команда start немного странная, когда дело доходит до кавычек.Вы можете воспроизвести это в командной строке с помощью start "C:\My Path\MyProg.exe" и увидеть тот же результат.Чтобы правильно выполнить его, перед ним необходим набор пустых кавычек: start "" "C:\My Path\MyProg.exe".

Таким образом, ваш конечный результат должен быть:

my program = "C:\\My Path\\MyProg.exe";
system('start "" "' . $program . '"');

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

0 голосов
/ 15 апреля 2011

Я не эксперт по Perl, но нашел следующую ссылку.

http://bytes.com/topic/perl/answers/697488-problem-system-command-windows

0 голосов
/ 15 апреля 2011

Попробуйте ...

my program = "C:/\"My Path\"/MyProg.exe";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...