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

87

Я пытаюсь запустить пакетный файл из общего сетевого ресурса, но получаю следующее сообщение: «Путь 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

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

Рагу
источник
2
Спустя годы, но, возможно, будет полезно для кого-то другого: после создания символической ссылки, почему вы продолжаете ссылаться на исходный путь? Символическая ссылка предназначена для того, чтобы указать вам локальный путь, который вы можете использовать вместо этого. Например, не говорите «\\ server \ soft \ WP15 \ setup.exe», говорите «% userprofile% \ Desktop \ WP15 \ setup.exe»
ToolmakerSteve
серьезно, это вопрос ServerFault.com
Цзюньчэн Лю

Ответы:

137

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 /?Для получения дополнительной информации введите в командной строке.

Dbenham
источник
2
Спасибо за быстрые ответы и предложения. Я надеялся, что ваше предложение сработает, но, к сожалению, у меня это не сработало. У меня такое же сообщение: «... UNC-пути не поддерживаются. По умолчанию используется каталог Windows». Я также получил диалоговое окно управления учетными записями пользователей, чтобы щелкнуть Да или Нет, даже если я запустил файл, войдя в систему как член группы администраторов.
Stew
26
@Stew В начале вашего .bat-файла укажите: pushd %~dp0Это должно заставить его сменить каталог на тот, который содержит ваш bat-файл. Он все равно распечатает предупреждение, но после этого должно работать как обычно. Если файл bat использует '% ~ dp0' в другом месте, у него могут быть проблемы с этим, в этом случае вы можете определить, %~dp0начинается ли с '//' в начале файла bat, и если да pushd, а затем запустить bat снова, тогда goto :EOF. Это заставит его работать в новом сопоставленном каталоге.
Грант Питерс
cmd будет выполняться на удаленном компьютере или локальном?
Dingxin Xu,
@DingxinXu - удаленный код будет работать локально. Если вы хотите запустить код на удаленном компьютере, вам понадобится что-то вроде PsExec .
dbenham
3
@balki - Да, поместите удаленные команды в другой скрипт. После PUSHDэтого выполните 2-й скрипт через CMD /C, а затем нажмите POPD. Управление вернется к родительскому сценарию после выхода из CMD /Cсценария, даже если он был прерван нажатием CTRL-C.
dbenham
29

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

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

   HKEY_CURRENT_USER
     \ Software
       \ Microsoft
         \ Командный процессор

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

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

Vinzz
источник
1
Не знаю, почему, но я нашел свою папку «Командный процессор» по следующему пути: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor
aoh
Спасибо, это полезно. Но в Windows 10 1803 это HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor, как указал @aoh.
Эдвин Ип
Тогда я обновлю ответ; спасибо за точность
Vinzz
26

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

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

Примечания:

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

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

Граллен
источник
4
Мне нужен был popdконец (Windows 7), иначе подключенные диски застряли после закрытия окна.
Патрик
1
Работает нормально. Спасибо.
Jonas_Hess
1
Это должно работать в Windows 10. Это все еще «Командная строка».
Grallen
11

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

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

афория
источник
1
Спасибо. Я попробую это как последний вариант, если другого решения нет.
Stew
Ответ @jameslr подойдет, но это больше работы (набор текста), чем я обычно готов. Так что мне достаточно просто очистить экран, чтобы избавиться от ошибки. :)
афория
8

Мне нужно было просто просмотреть в проводнике 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
ДжейРО-Седая Борода
источник
@ peter-mortensen, отредактировал комментарии в скрипте 4 раза, чтобы первое слово стало заглавным? Стоит редактировать? Почему бы не поставить точку в конце, чтобы превратить его в предложение? Как насчет: поскольку это всего лишь комментарий, я намеренно НЕ использую верхний регистр в первом слове в комментариях, ЗА ИСКЛЮЧЕНИЕМ в оценках и переменных (или акцентах) для более четкого понимания.
JayRO-GreyBeard
4

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

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

Джеймслер
источник
1
Это сработает, но только если вы хотите запустить с ярлыка. Это не поможет, если вы захотите запустить из командной строки или вызвать из другого командного файла.
aphoria
2
Если вы хотите позвонить из другого пакета или командной строки, вы можете позвонить так: start / d% TEMP% \\ Server \ Soft \ WP15 \ install.bat
jameslr
2

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

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

Кай
источник
2

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

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

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

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

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

Джеймс
источник
1

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

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"DisableUNCCheck"=dword:00000001
БесплатноПрограммное обеспечениеСерверы
источник
0

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

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

Чжуи Ван
источник
0

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

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

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

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

Ed999
источник
-1

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

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

Адхам Сабри
источник
1
Чем это отличается от ответа Кая ?
SomethingDark
Я не заметил этого, может быть, скриншоты стоят тысячи слов, которые имеют значение?
Adham