Публикации
Публикации  »  Cmd / Bat

CMD.EXE не поддерживает пути UNC в качестве текущей папки

Увидеть такое сообщение можно при попытке запуска 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 "HKCU\Software\Microsoft\Command Processor" /v DisableUNCCheck /t REG_DWORD /d 1

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

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

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

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

set netdisk=
for %%x IN (D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (
  net use %%x: <Путь_к_сетевой_папке> /persistent:no && set netdisk=%%x
  if not "!netdisk!"=="" goto next
)
:next
%netdisk%:
...
dir
...
net use %netdisk%: /d

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

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

 

Категория: Cmd / Bat

Комментарии к статье:

Пока комментариев нет, ваш будет первым ;)

Добавить комментарий: