Określ odwzorowaną ścieżkę sieciową z okna cmd

26

Mam dysk sieciowy - zmapowany na Z:\

Czy istnieje proste polecenie, aby poznać pełną ścieżkę sieci cmd?

To znaczy, jeśli cmdpokazuje Z:\ABC\, miałem polecenie do wyjścia\\networkDrive\MappedDir\ABC

net use jest w porządku, ale chciałbym uzyskać pełną ścieżkę do bieżącego katalogu roboczego (dla szybkich kopii).

Ofiris
źródło

Odpowiedzi:

37

Rodzaj

net use

Który pokaże wszystkie aktualnie podłączony dysk sieciowy.

OK           Z:        \\127.0.0.1\c$            Microsoft Windows Network
Dariusz
źródło
Dzięki, czy znasz sposób na uzyskanie pełnej ścieżki bieżącego katalogu roboczego?
Ofiris
1
Co echo %cd%?
Endoro
@Endoro, echo %cd%wyświetla bieżący katalog ( Z:\ABC), a nie\\netDrive\ABC
Ofiris
Nie sądzę, że istnieje prosta linia poleceń, którą możesz zrobić, aby ją zdobyć. Możesz być w stanie napisać skrypt wsadowy / PowerShell, aby to zrobić, ale nie próbowałem go stworzyć. Sprawdź odpowiedź Icarusa na: superuser.com/questions/244579/... może możesz użyć jej do swoich potrzeb.
Dariusz
Co z dyskami, które nie są obecnie podłączone (np. Przez VPN, który jest obecnie odłączony)?
1

To dość stare pytanie, ale ... szukałem dokładnie tej samej odpowiedzi, gdy próbowałem utworzyć partię, która użyje ścieżki UNC do faktycznej lokalizacji łatki i zrobi tam pewne rzeczy (więc skopiuj i wklej tylko w inne miejsce / folder i zacznij od nowa).

Ponieważ nie mogłem znaleźć odpowiedzi, sam znalazłem rozwiązanie, ale nie jest to zbyt piękne i na pewno nie jest to proste polecenie. Ale możliwe jest wdrożenie w partii. Na CMD byłoby to:

FOR /F "tokens=2" %i IN ('NET USE ^| FIND "%CD:~0,2%"') DO (
      SET cNetworkPath=%i)
SET cNetworkPath=%cNetworkPath%%CD:~2%
ECHO %cNetworkPath%

Możesz skopiować cztery linie (lepiej 4 + pusta linia) i wkleić je do CMD, aby uzyskać natychmiastowe echo ścieżki do skopiowania.

W partii użyłbyś tego nieco inaczej:

FOR /F "tokens=2" %%i IN ('NET USE ^| FIND "%~d0"') DO (
      bNetworkPath=%%i)
SET bCheckPath=!bOriginalPath!%~p0

Zmienna% CD% przechowuje bieżącą ścieżkę i potrzebujesz tylko litery napędu, więc możesz jej szukać tylko za pomocą polecenia ZNAJDŹ w NET USE. Przy „tokenach = 2” (lub 3, w zależności od wyniku NET USE) zmienna% i przechowuje ścieżkę do poszukiwanej litery dysku. Następnie drugie polecenie SET dodaje foldery, które przeglądałeś na dysku sieciowym za pomocą% CD: ~ 2% (przesunięcie 2, aby odciąć literę napędu).

Dla partii używasz zmiennych% ~ d0 lub% ~ p0. % 0 przechowuje pełną ścieżkę samej partii (np. Z: \ temp \ test.bat;% ~ d0 = Z:;% ~ p0 = \ temp \; d = dysk, p = ścieżka, f = pełna ścieżka, n = nazwa) w przeciwnym razie jest podobny do polecenia CMD.

Mykorrhiza
źródło
próbka jest intrygująca, ale zepsuta. Na przykład (DO...)brakuje przykładu wsadowego SET ...i bOriginalPathnie jest on nigdzie zdefiniowany.
matt wilkie
0

Ścieżka nietoperza może różnić się od katalogu roboczego. Potrzebujemy więc pierwszego podejścia Mykorrhiza do nietoperza. Aby uwzględnić sytuację braku statusu, a także lokalnych dysków, potrzebujemy dodatkowych kontroli. Oto działający kod:

SET cNetworkPath=    
FOR /F "tokens=2" %%i IN ('NET USE ^| FIND "%CD:~0,2%"') DO (
      SET cNetworkPath=%%i)
if "%cNetworkPath%" == "%CD:~0,2%" (
  FOR /F "tokens=3" %%i IN ('NET USE ^| FIND "%CD:~0,2%"') DO (
        SET cNetworkPath=%%i)
)
if "%cNetworkPath%" == "" set cNetworkPath=%CD:~0,2%
SET cNetworkPath=%cNetworkPath%%CD:~2%
ECHO %cNetworkPath%

Powyższy kod działa w większości przypadków, ale zdarzają się przypadki, w których użycie sieci i wyszukiwanie nie działają, następująca jest ostatecznie przetestowana metoda pracy:

SET cNetworkPath=
for /f "tokens=2" %%i in ('wmic path win32_mappedlogicaldisk get deviceid^, providername ^| findstr "%CD:~0,2%"') do (set cNetworkPath=%%i)
echo %cNetworkPath%
Szczery
źródło
0

Jeśli chcesz, aby zawsze wyświetlał go po monicie, możesz

set prompt=$M$Q$S$P

która pokaże ci ścieżkę UNC i ścieżkę opartą na literze dysku.

Masło do ciastek
źródło