Jak uruchomić plik wsadowy z udziału sieciowego bez komunikatu „Ścieżki UNC nie są obsługiwane”?

88

Próbuję uruchomić plik wsadowy z udziału sieciowego, ale wciąż pojawia się następujący komunikat: „Ścieżki UNC nie są obsługiwane. Domyślnie jest to katalog systemu Windows”. Plik wsadowy znajduje się na \\Server\Soft\WPX5\install.bat. Gdy jestem zalogowany jako administrator, z pulpitu Windows 7 przechodzę do pliku \\Server\Soft\WP15\install.bat i dwukrotnie klikam go, wtedy pojawia się komunikat „Ścieżki UNC nie są obsługiwane”. wiadomość. Znalazłem kilka sugestii online, w których stwierdzono, że dysk mapowania nie zadziała, ale użycie dowiązania symbolicznego rozwiąże ten problem, ale łącze symboliczne nie działa dla mnie. Poniżej znajduje się zawartość mojego pliku wsadowego. Byłbym wdzięczny za każdą pomoc, która może mi pomóc w realizacji tego, co próbuję zrobić. Zasadniczo chcę mieć możliwość uruchamiania pliku wsadowego z \\Server\Soft\WP15\install.bat.

Zawartość pliku wsadowego

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

Jak również usunąć dowiązanie symboliczne po zakończeniu instalacji?

Gulasz
źródło
2
Po latach, ale może przydaje się komuś innemu: dlaczego po utworzeniu dowiązania symbolicznego nadal odnosisz się do oryginalnej ścieżki? Celem dowiązania symbolicznego jest podanie ścieżki lokalnej, której możesz użyć zamiast tego. Np. Nie mów „\\ server \ soft \ WP15 \ setup.exe”, powiedz „% userprofile% \ Desktop \ WP15 \ setup.exe
ToolmakerSteve
poważnie, jest to pytanie
ServerFault.com

Odpowiedzi:

137

PUSHD i POPD powinny pomóc w twoim przypadku.

@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

Wpisz PUSHD /?w wierszu poleceń, aby uzyskać więcej informacji.

dbenham
źródło
2
Dziękuję za szybkie odpowiedzi i sugestie. Miałem nadzieję, że twoja sugestia zadziała, ale niestety nie zadziałała. Otrzymałem ten sam komunikat: „… ścieżki UNC nie są obsługiwane. Domyślnie jest to katalog Windows”. Pojawiło się również okno dialogowe Kontrola konta użytkownika, aby kliknąć Tak lub Nie, mimo że uruchomiłem plik, będąc zalogowanym jako członek grupy administratorów.
Gulasz
26
@Stew Na początku pliku .bat wpisz: pushd %~dp0To powinno spowodować zmianę katalogu na ten, który zawiera plik bat. Nadal wydrukuje ostrzeżenie, ale powinno wtedy działać jak zwykle. Jeśli plik bat używa „% ~ dp0” w innym miejscu, mogą występować z tym problemy, w takim przypadku możesz wykryć, czy %~dp0zaczyna się od „//” na początku pliku bat, a jeśli tak pushd, a następnie uruchomić bat ponownie goto :EOF. Spowoduje to uruchomienie go w nowo zmapowanym katalogu.
Grant Peters
czy cmd zostanie wykonane na komputerze zdalnym czy lokalnym?
Dingxin Xu
@DingxinXu - zdalny kod będzie działał lokalnie. Jeśli chcesz uruchomić kod na komputerze zdalnym, potrzebujesz czegoś takiego jak PsExec .
dbenham
3
@balki - Tak, umieść polecenia zdalne w innym skrypcie. Następnie PUSHDwykonaj drugi skrypt za pomocą CMD /C, a następnie za pomocą POPD. Control powróci do skryptu nadrzędnego po zakończeniu działania CMD /Cskryptu, nawet jeśli został zakończony przez CTRL-C.
dbenham
29

Istnieje ustawienie rejestru, które pozwala uniknąć tej kontroli bezpieczeństwa (jednak używaj jej na własne ryzyko):

Pod ścieżką rejestru

   HKEY_CURRENT_USER
     \ Software
       \ Microsoft
         \ Command Processor

dodaj wartość DisableUNCCheck REG_DWORD i ustaw wartość na 0 x 1 (Hex).

Uwaga: w systemie Windows 10 w wersji 1803 ustawienie wydaje się znajdować się pod HKLM: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor

Vinzz
źródło
1
Nie wiem dlaczego, ale znalazłem folder „Command Processor” pod następującą ścieżką: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor
aoh,
Dzięki, to pomocne. Ale w systemie Windows 10 1803 jest to HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor, jak wskazał @aoh.
Edwin Yip,
Zaktualizuję wtedy odpowiedź; dzięki za precyzję
Vinzz
26

Czuję, że clsto najlepsza odpowiedź. Ukrywa wiadomość UNC, zanim ktokolwiek ją zobaczy. Połączyłem to z @pushd %~dp0prawym after, aby wyglądało na to, że otwiera się skrypt i mapuje lokalizację w jednym kroku, zapobiegając tym samym dalszym problemom z UNC.

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

Uwagi:

pushd zmieni twój katalog roboczy na lokalizację skryptów na nowym zmapowanym dysku.

popd na koniec, aby wyczyścić zmapowany dysk.

Grallen
źródło
4
Potrzebowałem popdna końcu (Windows 7), w przeciwnym razie zmapowane dyski utknęły po zamknięciu okna.
Patrick,
1
Działa dobrze. Dziękuję Ci.
Jonas_Hess
1
Powinien działać w systemie Windows 10. Nadal jest to „Wiersz polecenia”.
Grallen
11

Zasadniczo nie można go uruchomić ze ścieżki UNC bez zobaczenia tego komunikatu.

Zwykle po prostu umieszczam znak CLSna górze skryptu, więc nie muszę widzieć tej wiadomości. Następnie określ pełną ścieżkę do plików w udziale sieciowym, których chcesz użyć.

aforia
źródło
1
Dziękuję Ci. Spróbuję tego jako ostatniej opcji, jeśli nie ma innego rozwiązania.
Gulasz
Odpowiedź @jameslr zadziała, ale wymaga więcej pracy (pisania) niż zwykle jestem gotów. Więc samo wyczyszczenie ekranu, aby pozbyć się błędu, jest dla mnie wystarczająco dobre. :)
aforia
8

Musiałem mieć możliwość przeglądania udziału serwera w Eksploratorze Windows, a następnie dwukrotnym kliknięciem uruchom plik wsadowy. @dbenham doprowadziło mnie do łatwiejszego rozwiązania dla mojego scenariusza (bez popdzmartwień):

:: 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
JayRO-GreyBeard
źródło
@ peter-mortensen, zredagowałeś komentarze w skrypcie 4x, aby pierwsze słowo było pisane wielką literą? Godny edycji? Dlaczego nie wstawić kropki na końcu, żeby było to zdanie? A co powiesz na: ponieważ to tylko komentarz, celowo NIE używam dużych liter w pierwszym słowie w komentarzach Z WYJĄTKIEM ocen i zmiennych (lub wyróżnień) dla lepszego zrozumienia.
JayRO-GreyBeard
4

Zamiast uruchamiać pakiet bezpośrednio z eksploratora - utwórz skrót do wsadu i ustaw katalog początkowy we właściwościach skrótu na ścieżkę lokalną, taką jak% TEMP% lub coś w tym stylu.

Aby usunąć dowiązanie symboliczne, użyj polecenia rmdir.

jameslr
źródło
1
To zadziała, ale tylko wtedy, gdy chcesz uruchomić ze skrótu. Nie pomoże, jeśli chcesz uruchomić z wiersza poleceń lub wywołać z innego pliku wsadowego.
aforia
2
Jeśli chcesz zadzwonić z innej partii lub linii poleceń, możesz wywołać w ten sposób: start / d% TEMP% \\ Server \ Soft \ WP15 \ install.bat
jameslr
2

Ostatnio napotkałem ten sam problem, pracując z plikiem wsadowym na dysku sieciowym w systemie Windows 7.

Innym sposobem, który zadziałał, było mapowanie serwera na dysk za pomocą Eksploratora Windows: Narzędzia -> Mapuj dysk sieciowy. Nadaj mu literę dysku i ścieżkę do folderu \ twój serwer. Ponieważ pracuję z udziałem sieciowym, często mapowanie do niego sprawia, że ​​jest to wygodniejsze i rozwiązało błąd „Ścieżki UNC nie są obsługiwane”.

Kai
źródło
2

Moja sytuacja jest trochę inna. Podczas uruchamiania uruchamiam plik wsadowy, aby rozpowszechniać najnowszą wersję wewnętrznych aplikacji biznesowych.

W tej sytuacji używam klucza uruchamiania rejestru systemu Windows z następującym ciągiem

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

Spowoduje to uruchomienie dwóch poleceń podczas uruchamiania we właściwej kolejności. Najpierw skopiuj plik wsadowy lokalnie do katalogu, do którego użytkownik ma uprawnienia. Następnie wykonuję ten sam plik wsadowy. Mogę utworzyć katalog lokalny c: \ InternalApps i skopiować wszystkie pliki z sieci.

Prawdopodobnie jest już za późno, aby rozwiązać pytanie pierwotnego autora, ale może to pomóc komuś innemu.

James
źródło
1

Oto klucz RegKey, którego użyłem:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"DisableUNCCheck"=dword:00000001
FreeSoftwareServers
źródło
1

To bardzo stary wątek, ale nadal używam Windows 7. :-)

Jest jeden punkt, którego nikt nie wziął pod uwagę, co prawdopodobnie pomogłoby również użytkownikom systemu Windows 10.

Jeśli rozszerzenia poleceń są włączone, polecenie PUSHD akceptuje ścieżki sieciowe oprócz normalnej litery dysku i ścieżki.

Więc oczywistą - i najprostszą - odpowiedzią może być włączenie rozszerzeń poleceń w skrypcie wsadowym, jeśli zamierzasz używać PUSHD. Powinno to przynajmniej zmniejszyć problemy, które możesz mieć podczas używania PUSHD ze ścieżką sieciową.

Ed999
źródło
0

Moja wersja env windows10 2019 lts i dodaję te dwa dane binray, napraw ten błąd

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command ProcessorWyłącz UNCCheck wartość 1 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Command Processor Wyłącz UNCCheck wartość 1

Zhui Wang
źródło
-1

Edytowanie rejestrów systemu Windows nie jest tego warte i nie jest bezpieczne, używaj Map network drivei ładuj udział sieciowy tak, jakby był ładowany z jednego z dysków lokalnych.

wprowadź opis obrazu tutaj

Adham Sabry
źródło
1
Czym to się różni od odpowiedzi Kaia ?
SomethingDark
Nie zauważyłem tego tbh, może zrzuty ekranu są warte tysiąca słów, które robią różnicę?
Adham Sabry