CoderNotes - заметки программиста

Публикации  »  Cmd / Bat
Бесплатный хостинг + SSL-сертификат

Зарегистрируйте домен и получите 2 месяца бесплатного хостинга и SSL-сертификат на 1 год в подарок

Подробнее
Skillbox

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

Книги по теме:

Денис Колисниченко

Самоучитель Microsoft Windows 10

Владимир Алмаметов

Windows 10. Секреты иустройство

Посмотреть все книги по программированию

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

15.11.19   Гость Спасибо!
Очень помогло.
12.09.20   Гость Спасибо! Очень профессионально.
05.08.21   Гость 2-й вариант помог, спасибо.
28.09.21   Гость Спасибо, намбер ту с батником ;)
07.10.21   Гость Топ робит
21.11.21   Гость Способ 4.
PUSHD and POPD should help in your case.
https://stackoverflow.com/questions/9013941/how-to-run-batch-file-from-network-share-without-unc-path-are-not-supported-me
28.08.22   Гость 2-й вариант то что надо!!! Спасибо!!!

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

Комментарии отключены.