首先,我对批处理脚本和网络完全是个菜鸟,说到这里,这里是我想完成的任务.我想检查服务器是否提供了这个批处理文件执行pc来访问它,如果没有创建访问它。(许多不同的pc运行这个批处理文件)这就是我现在想出的批处理文件。
net use * \\ip\My_WebApp /Persistent:yes /user:Username Password
Exit
这个批处理文件命令创建对服务器的访问就好了,但它每次执行这个文件时都会创建一个新的访问连接。这是不需要的,而且可能会使服务器负载崩溃。
我如何检查服务器是否已经提供了访问权限,只有当没有提供访问权限时,在批处理文件中执行上述命令。
boolean status = check_server_accessibility()
if(!status){
net use * \\ip\My_WebApp /Persistent:yes /user:Username Password
}
Exit
Appreciate any help, Thank you so much for your time.
你应该只需要执行一次任务,这说明不需要脚本解决方案。(持久的意思是说!). 我认为下面的内容可能就足够了。
@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
或者,如果你需要知道当前分配给它的是哪个驱动器字母,那就可以使用 for-loop 来检索数据。
@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"
.
注意事项 这些解决方案未经测试,我没有使用电脑,也没有映射的网络位置来测试它们。如果我有什么地方做错了,请告诉我。