Zastanawiam się, czy istnieje uniwersalny sposób rozwiązywania ścieżki przy użyciu litery dysku (takiej jak X:\foo\bar.txt
) w jej równoważnej ścieżce UNC, która może być jedną z następujących:Rozpoznaj literę dysku systemu Windows na ścieżce (podrzędnej i sieci)
X:\foo\bar.txt
jeśliX:
to prawdziwy napęd (tj dysk twardy, pamięć USB, itd.)\\server\share\foo\bar.txt
jeśliX:
jest dysk sieciowy zamontowany na\\server\share
C:\xyz\foo\bar.txt
jeżeliX:
jest wynikiemSUBST
poleceń mapowanieX:
doC:\xyz
Wiem, że istnieją rozwiązania częściowe, które będą:
rozwiązać dysk sieciowy (patrz na przykład question 556649 która polega na
WNetGetUniversalName
)rozwiązać
SUBST
litera dysku (patrzQueryDosDevice
, która działa zgodnie z oczekiwaniami, ale nie zwraca ścieżek UNC dla takich rzeczy, jak dyski lokalne lub dyski sieciowe).
Czy brakuje mi prostego sposobu implementacji tej rozdzielczości dysku w Win32? Czy naprawdę muszę zadziwić zarówno z WNetGetUniversalName
i QueryDosDevice
, aby uzyskać to, czego potrzebuję?
ah, tak, przechodząc drogę CMD jest rozwiązaniem Odrzuciłem początkowo. Naprawdę starałem się znaleźć Win32 API, który mógłby zrobić lewy. Oczywiście, twoje rozwiązanie powinno działać dla osób próbujących zrobić to samo w środowisku wsadowym/skryptowym. Wielkie dzięki za twoje pomysły; to była okazja, aby (ponownie) odkryć niektóre sztuczki CMD. –
Ten skrypt jest niesamowity. Tylko jeden błąd - nie obsługuje spacji w podstawionej ścieżce dysku. Aby naprawić, zmień pierwszą pętlę for z: ... tokeny = 1,2 ... na ... tokeny = 1 * ... –
@MrBungle: Dzięki! Nie wiedziałem o "tokenach = 1 *", zbada. Jesteś pewien, że to nie jest "1,2 *"? – Benoit