Увидеть такое сообщение можно при попытке запуска bat или cmd файла с сетевого ресурса. Всё дело в том, что CMD.EXE проверяет, используется ли имя UNC для текущего каталога и считается, что имя UNC может вызвать проблемы с дочерними процессами, запущенными с этой же консоли при выходе из консоли или остановке (об этом написано на сайте Microsoft). UNC (Universal Naming Convention) — это соглашение об именовании файлов и других ресурсов, дающее машинонезависимое определение местоположения ресурса, т.е. описание пути к файлу или папке с полным указанием имени сервера и имени сетевого ресурса.

Для того, чтобы запретить CMD.EXE проверять UNC имена и запускать скрипт без вопросов, нужно сделать следующее:

Способ 1. Запретить проверять путь UNC через редактор реестра.

Запустить regedit.exe (нажать "Пуск", в поле "Найти программы и файлы" написать "regedit.exe").

Открыть ветку реестра: HKEY_CURRENT_USER Software Microsoft Command Processor

Создать параметр типа DWORD (число) с наименованием DisableUNCCheck и установить его значение равное 1.

Возможные значения этого параметра:

  • 0 — выводить предупреждающее сообщение и устанавливать текущий путь равный системной папке Windows.
  • 1 — не выводить предупреждающее сообщение и пытаться выставить текущий путь равный UNC пути.

Способ 2. Выполнить команду, создающую параметр DisableUNCCheck

Нажать "Пуск" -> "Выполнить" или запустить "Командную строку" и выполнить команду:

reg add "HKCUSoftwareMicrosoftCommand Processor" /v DisableUNCCheck /t REG_DWORD /d 1

После выполнения этой команды создастся параметр как и в способе 1-м.

Теперь можно запускать bat или cmd скрипты из сетевого пути.

Способ 3. Подключить сетевой путь как сетевой диск

Для этого можно использовать такой код bat-файла с автоматическим подбором первой свободной буквы для сетевого диска:

нужно поменять на свой путь с указанием имени компьютера и сетевого ресурса.

После подключения сетевого диска я написал команду dir, чтобы убедиться, что путь поменялся, а вам нужно написать свои команды, которые будут выполняться для сетевого ресурса. После выполнения всех нужных действий, сетевой диск отключается командой net use %netdisk%: /d

cmd: UNC-путь

CMD.EXE по умолчанию не поддерживает UNC-пути. Если попытаться выполнить команду командного процессора, в случае, если текущий путь -UNC, то в консоль выводится информация:

"Указанный путь был использован при запуске CMD.EXE в качестве текущей папки. CMD.EXE не поддерживает пути UNC. По умолчанию выбрана системная папка Windows. Ошибка в синтаксисе команды."

"CMD.EXE was started with the above path as the current directory. UNC paths are not supported. Defaulting to Windows directory."

Параметр "DisableUNCCheck" позволяет решить эту проблему. Значение параметра может быть одним из следующих:
0 — выводить предупреждающее сообщение и устанавливать текущий путь
равный системной папке Windows.
1 — не выводить предупреждающее сообщение и пытаться выставить текущий
путь равный UNC пути.

По умолчанию в Windows параметр равен 0.
Рекомендуемое значение 1.

Подробнее: http://www.winguides.com/registry/display.php/1247/ или в статье Microsoft — Q156276

PS: а вот так можно добавить этот ключ из командной строки или скрипта

reg add "HKCUSoftwareMicrosoftCommand Processor" /v DisableUNCCheck /t REG_DWORD /d 1

Обо всём с чем приходится сталкиваться

Запуск .bat файла из сетевой папки

Был скрипт, который в тихом (silent) режиме ставил некоторый пакет программ, удалял предыдущие, накатывал обновления. Тестировалось всё это дело либо на локальном диске либо на сетевой шаре подключенной как диск(через net use). Все работало замечательно, пока не попробывали запустить батник напрямую из шары и тут нам выдало нелицеприятное:

Указанный путь был использован при запуске CMD.EXE в качестве текущей папки. CMD.EXE не поддерживает пути UNC. По умолчанию выбрана системная папка Windows.

то установщик ничего не найдет(в системной папке ничего такого же нет!) и хорошенько ругнется;) А если у Вас стояла команда удаления файлов в текущей директории, хехе, то тут надо быстрее жать Ctrl+C иначе будет очень больно)))

Решения данной проблемки нашлось два:

1. Указывать абсолютные пути
Путь откуда был запущен наш батник, то есть директорию запуска бат файла, можно получить через

dp0 Installsetup.msi" /qb

И таким образом можно опять использовать относительные пути

2. Заставить винду не ругаться на сетевые пути и не менять текущий каталог
В этом случае надо поправить кое-что в реестре, а именно выставить DisableUNCCheck в единичку. Создаем файл с расширением .reg и копируем туда этот текст:

[HKEY_CURRENT_USERSoftwareMicrosoftCommand Processor]
"DisableUNCCheck"=dword:00000001

Запускаем и радуемся, что теперь винда не ругается при запуске батника из шары и ничего не меняет;)