Вам нужно выполнить задачу только один раз, что говорит о том, что скриптовое решение не требуется, (постоянство означает это!) . Я предполагаю, что следующего может быть достаточно:
@Set "MyMap=\\ip\My_WebApp"
@%__AppDir__%wbem\WMIC.exe LogicalDisk Where "DriveType='4'" Get ProviderPath 2>NUL | %__AppDir__%findstr.exe /R /I "%MyMap:\=\\%\>" 1>NUL && GoTo :EOF
@%__AppDir__%net.exe Use * "%MyMap%" /Persistent:Yes /User:Username Password
В качестве альтернативы, если вам нужно знать, какая буква диска назначена ему в настоящее время, используйте для-l oop для получения данных:
@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Call :MapChk "\\ip\My_WebApp"
GoTo :EOF
:MapChk
Set "MyMap=%~1"
Set "MyDrv="
For /F "Skip=1 Delims=:" %%G In (
'%__AppDir__%wbem\WMIC.exe LogicalDisk Where "DriveType='4' And ProviderPath='%MyMap:\=\\%'" Get DeviceID 2^>NUL'
) Do For %%H In (%%G) Do Set "MyDrv=%%G:"
If Defined MyDrv (
Echo %MyMap% is already mapped to drive %MyDrv%.
%__AppDir__%timeout.exe /T 5 /NoBreak >NUL
GoTo :EOF
)
%__AppDir__%net.exe Use * "%MyMap%" /Persistent:Yes /User:Username Password
Я сделал из этого ярлыка call
, чтобы вы могли легко расширить его и для других сопоставлений, например, перед GoTo :EOF
, (строка 6
) , Call :MapChk "\\Server\My Share"
.
Примечание: Эти решения не тестировались, я не использую P C и не отображал сетевые местоположения, чтобы проверить их. Пожалуйста, дайте мне знать, если я где-то ошибся.