Здравствуйте, stackoverflowers,

Боюсь, я не могу понять, как открыть путь UNC с пробелами в проводнике Windows на perl. Цель: я хочу, чтобы пользователь поместил файл в путь. Для удобства путь должен открываться в проводнике автоматически. Что он делает для любых локальных дисков.

Путь UNC, который должен открыться: \\ srvr1 \ mean space dir

Мой код на данный момент:

use strict
use warnings

my $sourceDir = "\\\\srvr1\\mean space dir";
system("start $sourceDir");

Что дает ошибку: «Win не может получить доступ к \\ srvr1 \ mean». Хорошо, поэтому я попытался процитировать строку:

my $sourceDir = "\\\\srvr1\\\"mean space dir\"";

Что приводит к: «Win не может получить доступ к \\ srvr1 \" означает космический каталог "».

Следующее, что я попробовал, было:

my $sourceDir = q{"\\\srvr1\\mean space dir"}

Что привело к открытию окна cmd с правильным путем в заголовке ?!

Может быть, сам системный вызов неверен? Я очень ценю любую помощь. Благодарю.

1
OneK 22 Окт 2015 в 04:52

2 ответа

Лучший ответ

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

Вот так:

my $sourceDir = q{\\\\srvr1\\mean space dir};
system(qq{start "" "$sourceDir"});
3
ikegami 22 Окт 2015 в 04:52

Для такого рода вещей хорошо подходит системный вызов стиля массива. Вам не нужно беспокоиться о цитировании пути или об экранировании.

$path = '\\\\srvr1\mean space dir';
system('start', '', $path);

Цитирование (или забвение цитирования) путей в системных вызовах является значительным источником ошибок, в которых я работал. Привычка делать это, как указано выше, означает, что вам никогда не нужно об этом беспокоиться.

1
Nick P 22 Окт 2015 в 05:10