Как запустить командный файл из сетевого ресурса без сообщения UNC path are not supported?

Я пытаюсь запустить пакетный файл из общего сетевого ресурса, но получаю следующее сообщение: «Путь UNC не поддерживается. По умолчанию используется каталог Windows». Пакетный файл находится на \\Server\Soft\WPX5\install.bat. Войдя в систему как администратор, со своего рабочего стола Windows 7 я перехожу к \\Server\Soft\WP15\ и дважды щелкаю install.bat, тогда я получаю сообщение «Путь UNC не поддерживается». сообщение. Я нашел несколько предложений в Интернете, в которых говорится, что сопоставление диска не будет работать, но использование символической ссылки решит эту проблему, но символическая ссылка у меня не сработала. Ниже приведено содержимое моего командного файла, я был бы признателен за любую помощь, которая может помочь мне выполнить то, что я пытаюсь сделать. По сути, я хочу иметь возможность запускать командный файл из \\Server\Soft\WP15\install.bat.

Содержимое пакетного файла

mklink /d %userprofile%\Desktop\WP15 \\server\soft\WP15
\\server\soft\WP15\setup.exe
robocopy.exe "\\server\soft\WP15\Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s \\server\soft\WPX5\Custom\Migrate.reg

Кроме того, как удалить символическую ссылку после завершения установки?


person Stew    schedule 26.01.2012    source источник
comment
Спустя годы, но, возможно, будет полезно для кого-то другого: после создания символической ссылки, почему вы продолжаете ссылаться на исходный путь? Смысл символической ссылки - дать вам локальный путь, который вы можете использовать вместо этого. Например. не говорите \\ server \ soft \ WP15 \ setup.exe, скажите% userprofile% \ Desktop \ WP15 \ setup.exe   -  person ToolmakerSteve    schedule 21.03.2014
comment
серьезно, это вопрос ServerFault.com   -  person Junchen Liu    schedule 18.11.2015


Ответы (12)


PUSHD и POPD должны помочь в вашем случае.

@echo off
:: Create a temporary drive letter mapped to your UNC root location
:: and effectively CD to that location
pushd \\server\soft

:: Do your work
WP15\setup.exe
robocopy.exe "WP15\Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s WPX5\Custom\Migrate.reg

:: Remove the temporary drive letter and return to your original location
popd

Для получения дополнительной информации введите PUSHD /? в командной строке.

person dbenham    schedule 26.01.2012
comment
Спасибо за быстрые ответы и предложения. Я надеялся, что ваше предложение сработает, но, к сожалению, у меня это не сработало. У меня такое же сообщение: ... Пути UNC не поддерживаются. По умолчанию каталог Windows. Я также получил диалоговое окно «Контроль учетных записей», в котором нужно было щелкнуть «Да» или «Нет», хотя я запускал файл, войдя в систему как член группы администраторов. - person Stew; 27.01.2012
comment
@Stew В начале вашего .bat-файла поместите: pushd %~dp0 Это должно заставить его сменить каталог на тот, который содержит ваш bat-файл. Он все равно распечатает предупреждение, но после этого должно работать как обычно. Если файл bat использует '% ~ dp0' в другом месте, у него могут быть проблемы с этим, в этом случае вы можете определить, начинается ли %~dp0 с '//' в начале файла bat, и если да, pushd, а затем снова запустите bat-файл, затем goto :EOF. Это заставит его работать в новом сопоставленном каталоге. - person Grant Peters; 24.06.2013
comment
cmd будет выполняться на удаленном компьютере или локальном? - person Dingxin Xu; 22.11.2013
comment
@DingxinXu - удаленный код будет запускаться локально. Если вы хотите запустить код на удаленном компьютере, вам понадобится что-то вроде PsExec. - person dbenham; 22.11.2013
comment
Это отлично работает, кроме случаев, когда команда убивается с помощью ctrl + C. когда команда завершается, пакетный сценарий завершается без вызова popd. Можно ли всегда запускать popd, когда скрипт завершен или убит раньше? - person balki; 17.04.2014
comment
@balki - Да, поместите удаленные команды в другой скрипт. После PUSHD выполните второй сценарий с помощью CMD /C, а затем с помощью POPD. Управление вернется к родительскому сценарию после выхода CMD /C сценария, даже если он был прерван нажатием CTRL-C. - person dbenham; 17.04.2014
comment
У меня была аналогичная проблема, и pushd / popd действительно прекрасно справились с задачей. - person zeycus; 04.07.2018

Существует параметр реестра, позволяющий избежать этой проверки безопасности (однако используйте ее на свой страх и риск):

По пути в реестре

HKEY_CURRENT_USER
\ Программное обеспечение
\ Microsoft
\ Командный процессор

добавьте значение DisableUNCCheck REG_DWORD и установите значение 0 x 1 (Hex).

Примечание. В Windows 10 версии 1803 этот параметр находится в разделе HKLM: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor.

person Vinzz    schedule 11.01.2013
comment
Не знаю почему, но я нашел свою папку командного процессора по следующему пути: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor - person aoh; 29.05.2018
comment
Спасибо, это полезно. Но в Windows 10 1803 это HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor, как указал @aoh. - person Edwin Yip; 25.12.2018
comment
Тогда я обновлю ответ; спасибо за точность - person Vinzz; 09.01.2019

Я считаю, что cls - лучший ответ. Он скрывает сообщение UNC до того, как его увидят. Я объединил его с @pushd %~dp0 сразу после этого, чтобы казалось, что я открываю скрипт и отображаю местоположение за один шаг, тем самым предотвращая дальнейшие проблемы UNC.

cls
@pushd %~dp0
:::::::::::::::::::
:: your script code here
:::::::::::::::::::
@popd

Примечания:

pushd изменит ваш рабочий каталог на место сценария на новом подключенном диске.

popd в конце, чтобы очистить подключенный диск.

person Grallen    schedule 09.12.2015
comment
Мне нужен был popd в конце (Windows 7), иначе подключенные диски застревали после закрытия окна. - person Patrick; 07.06.2016
comment
Работает нормально. Спасибо. - person Jonas_Hess; 25.07.2016
comment
Он должен работать в Windows 10. Это все еще командная строка. - person Grallen; 22.07.2019

По сути, вы не можете запустить его по пути UNC, не увидев этого сообщения.

Обычно я просто помещаю CLS в начало скрипта, чтобы мне не приходилось видеть это сообщение. Затем укажите полный путь к файлам в общей сетевой папке, которые вам нужно использовать.

person aphoria    schedule 26.01.2012
comment
Спасибо. Я попробую это как последний вариант, если другого решения нет. - person Stew; 27.01.2012
comment
Ответ @jameslr будет работать, но это больше работы (набор текста), чем я обычно готов. Так что мне достаточно просто очистить экран, чтобы избавиться от ошибки. :) - person aphoria; 27.01.2012

Мне нужно было, чтобы проводник Windows мог просто просмотреть общий ресурс сервера, а затем дважды щелкнуть запускать пакетный файл. @dbenham привел меня к более простому решению для моего сценария (без забот popd):

:: Capture UNC or mapped-drive path script was launched from
set NetPath=%~dp0

:: Assumes that setup.exe is in the same UNC path
%NetPath%setup.exe

:: Note that NetPath has a trailing backslash ("\")
robocopy.exe "%NetPath%Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s %NetPath%..\WPX5\Custom\Migrate.reg

:: I am not sure if WPX5 was typo, so use ".." for parent directory
set NetPath=
pause
person JayRO-GreyBeard    schedule 25.10.2014
comment
@ peter-mortensen, отредактировал комментарии в скрипте 4 раза, чтобы первое слово стало заглавным? Стоит редактировать? Почему бы не поставить точку в конце, чтобы превратить его в предложение? Как насчет: поскольку это всего лишь комментарий, я намеренно НЕ использую верхний регистр в первом слове в комментариях, ЗА ИСКЛЮЧЕНИЕМ в оценках и переменных (или акцентах) для более четкого понимания. - person JayRO-GreyBeard; 29.09.2016

Вместо того, чтобы запускать пакет напрямую из проводника - создайте ярлык для пакета и установите начальный каталог в свойствах ярлыка на локальный путь, например% TEMP% или что-то в этом роде.

Чтобы удалить символическую ссылку, используйте команду rmdir.

person jameslr    schedule 26.01.2012
comment
Это сработает, но только если вы хотите запустить с ярлыка. Это не поможет, если вы захотите запустить из командной строки или вызвать из другого командного файла. - person aphoria; 26.01.2012
comment
Если вы хотите позвонить из другого пакета или командной строки, вы можете вызвать это так: start / d% TEMP% \\ Server \ Soft \ WP15 \ install.bat - person jameslr; 26.01.2012

Я столкнулся с той же проблемой, недавно работая с пакетным файлом на сетевом диске в Windows 7.

Другой способ, который сработал для меня, - это сопоставить сервер с диском через проводник Windows: Инструменты -> Подключить сетевой диск. Дайте ему букву диска и путь к папке \ yourserver. Поскольку я работаю с общим сетевым ресурсом, его сопоставление с сетевым ресурсом часто делает его более удобным и устраняет ошибку «Путь UNC не поддерживается».

person Kai    schedule 21.10.2013

Моя ситуация немного другая. Я запускаю командный файл при запуске для распространения последней версии внутренних бизнес-приложений.

В этой ситуации я использую ключ запуска реестра Windows со следующей строкой

cmd /c copy \\serverName\SharedFolder\startup7.bat %USERPROFILE% & %USERPROFILE%\startup7.bat

Это запускает две команды при запуске в правильной последовательности. Сначала скопируйте пакетный файл локально в каталог, на который у пользователя есть разрешение. Затем выполняем тот же командный файл. Я могу создать локальный каталог c: \ InternalApps и скопировать все файлы из сети.

Вероятно, уже слишком поздно решать вопрос исходного плаката, но это может помочь кому-то другому.

person James    schedule 27.12.2013

Это RegKey, который я использовал:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"DisableUNCCheck"=dword:00000001
person FreeSoftwareServers    schedule 31.10.2018

Моя версия env windows10 2019 lts, ​​и я добавляю эти два данных binray, исправьте эту ошибку

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor DisableUNCCheck значение 1 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Command Processor DisableUNCCheck значение 1

person Zhui Wang    schedule 26.08.2019
comment
Спасибо - в 2016 году это тоже, кажется, решило - второе значение тоже понадобилось - person whytheq; 09.02.2021

Это очень старый поток, но я все еще использую Windows 7. :-)

Есть один момент, который, похоже, никто не принял во внимание, что, вероятно, также поможет пользователям Windows 10.

Если расширения команд включены, команда PUSHD принимает сетевые пути в дополнение к обычной букве диска и пути.

Таким образом, очевидным и самым простым ответом может быть включение расширений команд в пакетном сценарии, если вы собираетесь использовать PUSHD. По крайней мере, это должно уменьшить проблемы, которые могут возникнуть при использовании PUSHD с сетевым путем.

person Ed999    schedule 22.05.2020

Редактировать реестры Windows не стоит и небезопасно, используйте Map network drive и загрузите общий сетевой ресурс, как если бы он загружался с одного из ваших локальных дисков.

введите описание изображения здесь

person Adham Sabry    schedule 08.11.2019
comment
Чем это отличается от ответа Кая? - person SomethingDark; 08.11.2019
comment
Я этого не заметил, может быть, скриншоты стоят тысячи слов, которые имеют значение? - person Adham Sabry; 11.11.2019