Як запустити пакетний файл із спільної мережі без повідомлення “Шлях UNC не підтримується”?


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 /?з командного рядка для отримання додаткової інформації.


2
Дякуємо за швидкі відповіді та пропозиції. Я сподівався, що ваша пропозиція спрацює, але, на жаль, вона не спрацювала для мене. Я отримав те саме повідомлення: "... Шляхи UNC не підтримуються. За замовчуванням каталог Windows." Я також отримав діалогове вікно «Контроль облікових записів користувачів», щоб натиснути «Так» чи «Ні», навіть якщо я запускав файл, увійшовши до системи як член групи адміністраторів.
Тушковане м'ясо

26
@Stew На початку вашого .bat-файлу поставте: pushd %~dp0Це повинно змусити його змінити каталог на каталог, що містить ваш файл bat. Він все одно роздрукує попередження, але тоді він повинен працювати, як зазвичай. Якщо файл bat використовує "% ~ dp0" деінде, у нього можуть бути проблеми, у цьому випадку ви можете виявити, чи %~dp0починається з "//" на початку файлу bat, а якщо так, pushdто запустіть файл файлу bat знову goto :EOF. Це призведе до його запуску в нещодавно зіставленому папці.
Grant Peters

буде виконано cmd на віддаленому комп'ютері чи локально?
Dingxin Xu

@DingxinXu - віддалений код буде працювати локально. Якщо ви хочете запустити код на віддаленому комп'ютері, вам знадобиться щось на зразок PsExec .
dbenham

3
@balki - Так, помістіть віддалені команди в інший сценарій. Після цього PUSHDвиконайте 2-й сценарій за допомогою CMD /Cі виконайте його за допомогою POPD. Елемент керування повернеться до батьківського сценарію після виходу CMD /Cсценарію, навіть якщо його було припинено CTRL-C.
dbenham

29

Існує параметр реєстру, щоб уникнути цієї перевірки безпеки (однак використовуйте його на власний ризик):

Під шляхом реєстру

   HKEY_CURRENT_USER
     \ Software
       \ Microsoft
         \ Command Processor

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

Примітка: У Windows 10 версії 1803, схоже, параметр знаходиться під HKLM: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor


1
Не знаю, чому, але я знайшов свою папку "Командний процесор" за таким шляхом: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor
aoh

Дякую, це корисно. Але в Windows 10 1803 це HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor, як зазначив @aoh.
Едвін Іп,

Тоді я оновлю відповідь; дякую за точність
Вінзз

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
Дякую. Я спробую це як останній варіант, якщо іншого рішення немає.
Тушковане м'ясо

Відповідь @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, редагував коментарі в сценарії 4x, щоб написати велике перше слово? Варто редагувати? Чому б не поставити крапку в кінці, щоб зробити це реченням? Як щодо: оскільки це просто коментар, я навмисно НЕ використовую великі регістри в першому слові в коментарях, КРИМ у виправданнях та змінних (або наголосі) для більш чіткого розуміння.
JayRO-GreyBeard

4

Замість того, щоб запускати пакет безпосередньо з провідника - створіть ярлик до пакета та встановіть початковий каталог у властивостях ярлика на локальний шлях, наприклад% TEMP% або щось інше.

Щоб видалити символічне посилання, використовуйте команду rmdir.


1
Це спрацює, але лише якщо ви хочете запустити за допомогою ярлика. Це не допоможе, якщо ви хочете запустити командний рядок або зателефонувати з іншого пакетного файлу.
афорія

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 з мережевим шляхом.


-1

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

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


1
Чим це відрізняється від відповіді Кая ?
SomethingDark

Я цього не помітив, може, скріншоти варті тисячі слів, які мають значення?
Adham
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.