可以从命令行重新连接映射的网络驱动器吗?


32

我每天都在Windows命令提示符下发现自己需要访问已映射但已断开连接的网络驱动器。我还没有找到可以重新连接该驱动器而不取消映射和重新映射的命令(这导致出现密码猜测游戏,因为我不拥有这些计算机)。我还希望能够对此进行脚本编写,以便驱动器每天晚上都以某种方式断开连接,然后重新连接。

我目前拥有的最快解决方案是:

  1. 输入“ start.”以打开资源管理器,
  2. Alt- D聚焦地址栏,
  3. 键入所需的驱动器号,然后按Enter键,然后等待显示驱动器内容,
  4. 然后最后,关闭资源管理器并返回命令提示符。

我知道这是一个小麻烦,但是我经常通过缓慢的VNC或PCAnywhere连接来完成此操作,而通过GUI进行任何操作都很糟糕,所以我只是想知道是否有更好的解决方案。


1
当您`dir h:\`会发生什么?
wfaulk

3
代替键入“ start。<enter>”,您可以执行win-E并保存5次击键;-)
fretje

1
我仅使用\\ server \ share路径而不是映射的驱动器来“解决”它。您可以根据需要复制文件。(那是我的问题)
Peterdk

Answers:


12

也许试试pushd \\server\share


2
我不确定这是我所需要的。Pushd看起来像是在创建临时驱动器号。我已经映射了驱动器号,但是共享已断开连接(它在资源管理器中具有红色的X,并标记为“断开的网络驱动器”)。也许我误会了。
史蒂芬·詹宁斯

是的,我当时认为以这种方式访问​​它可能会导致驱动器重新连接。您可以popd用来删除驱动器号。
wfaulk

下次遇到此问题时,我将尝试。我怀疑它要么无法说出设备正在使用中,要么将错误的驱动器号连接到共享。
史蒂芬·詹宁斯

2
我尝试了一下,它确实起作用了。我首先运行到共享,然后弹出以取消映射多余的驱动器号,然后发现我想要的映射驱动器已重新连接。这绝对是一个投票,如果我在几天之内没有收到简短的答复,这将被接受。
史蒂芬·詹宁斯

1
我还没有投票权,但是这个答案对我没有任何帮助。请参阅下面的几篇文章,看看有哪些。我还在那儿发表评论。
prl77

8

我必须先启动Windows 7,然后才能运行将我连接到公司网络驱动器的VPN程序。因此,我的网络驱动器不会自动重新连接,只有在Windows资源管理器中打开它们才能重新连接它们。

我制作了一个小的批处理文件来启动VPN,重新连接网络驱动器并启动一些我经常使用的应用程序。

在我的批处理文件中,我有以下内容:

REM Connect VPN here...

REM Opens an Explorer window looking at T: forcing a reconnect
Start /min explorer t:\

timeout 3 /nobreak

REM Kill all Explorer windows beginning with "T_drive" in the title
Taskkill /fi "windowtitle eq T_drive*"

REM Finish starting up here...

exit

Taskkill /fi "windowtitle eq"命令区分大小写!


谢谢,这是对我有帮助的唯一答案。我当然赞成,但是对于您上面的那些帖子,我还没有否决权。
prl77

顺便说一句,我找不到具有区分大小写的“ taskkill”功能,至少在具有最新补丁的Win 7 x64上没有。
2015年

注意:如果上面的taskkill参数对您不起作用,请尝试使用TASKLIST / FI“ IMAGENAME eqexplorer.exe” / V查看正确的窗口标题。我的TASKKILL筛选器字符串最终为“ windowtitle eq c $ *”
路加福音

卢克斯(Thx Luke)为您发表评论。它确实帮助了我
Pawel

7

使用以下命令创建一个批处理文件(refreshletters.cmd)

这些仅在批处理文件中起作用

在Win7和XP上进行了测试,以刷新控制台窗口(命令行)中的“断开连接”和“不可用”驱动程序字母。

@echo off
net use |FIND ":" > %temp%\used.txt
FOR /F " tokens=1,2,3 delims= " %%i in (%temp%\used.txt) do (

  if %%i EQU Unavailable  (
    net use %%j %%k
    echo Activated %%j
   ) ELSE (
     if %%i EQU Disconnected (
       pushd .
       cd /d %%j
       dir . %>nul
       if NOT exist %%j\. (
          net use %%j /del /y
          net use %%j %%k
          echo Remapped %%j
          ) else (
             echo Fixed-up %%j
            )
       popd
       ) ELSE (
          echo Checked %%j
          )
     )
 )

鉴于我们不了解OP的专业水平,因此扩大您的答案可能是个好主意。
Tog

net use对我适用于Win7中的“不可用”映射驱动器。ty
Mat M

1
我还没有投票权,但是这个答案对我没有任何帮助。请参阅克劳斯·梅兰德(Claus Melander)的以下帖子。我还在那儿发表评论。
prl77,2015年

1
它可以正常工作(在win7 x64上测试),但是它取决于net use扫描时所依赖的语言输出Unavailable。但是,如果您获得的是德语win7 Nicht verfgb,则需要修改语言的解决方案
jeb 2015年

这对我有用,除了一个共享路径在网络路径中有一个空间外……总之,我最终在批处理文件中做了一些硬编码的“ net use X:\\ share \ path”行,我如果我更改驱动器映射,将使它保持最新。这对我来说是最好的解决方案,因为我真的不想弹出浏览器窗口来使驱动器重新连接...
Aaron

6

这可能是一个愚蠢的问题,但是假设您的“断开连接”驱动器为H :,您是否尝试过直接更改为该驱动器?

它在XPSP3下对我有用:

C:\>net use
New connections will be remembered.


Status       Local     Remote                    Network

-------------------------------------------------------------------------------
Disconnected H:        \\xxxxxx\wfaulk           Microsoft Windows Network
OK                     \\xxxxxxx\business        Microsoft Windows Network
The command completed successfully.


C:\>h:

H:\>net use
New connections will be remembered.


Status       Local     Remote                    Network

-------------------------------------------------------------------------------
OK           H:        \\xxxxxx\wfaulk           Microsoft Windows Network
OK                     \\xxxxxxx\business        Microsoft Windows Network
The command completed successfully.

2
命令提示符不允许您切换到当前断开连接的网络驱动器。至少不是在我正在使用的数百台计算机上(WinNT,Win2k,WinXP,WinXP Embedded)。
Stephen Jennings

1
奇怪的。我发誓它对我有用。
wfaulk

它也对我有用!
斯纳克(Snark)2009年

我承认我偶尔看过这项工作,但大多数时候却没有。我不知道是什么决定一种或另一种方式,可能不知道是否保存了凭据。
Stephen Jennings

1
哦,我敢打赌就是这样。我会使用域凭据自动进行身份验证。
wfaulk

4

我知道您说“网络使用”对您没有用-但是您可以尝试以下方法。

使用net use / DELETE选项运行批处理文件以删除现有/持久连接,然后可以将net use与/ SAVECRED选项一起使用,以重复使用上一次成功登录时使用的密码。我不确定这是否可以解决您的问题,但值得研究。


这不是我所需要的,但这绝对是一件有用的事情。这解决了我遇到的另一个问题。
史蒂芬·詹宁斯

2

我有多个连接相同的问题,并且是间歇性的。当我重新启动计算机时,有时连接是“良好”,有时却不是。由于我在公司的LAN上,所以我没有密码问题,但仍然有其他问题。

我创建了一个名为ex.bat的批处理文件,并将其(以及许多其他内容)存储在我放置在路径中的\ util目录中。我可以输入“ ex h:”,它将运行Windows资源管理器并将其设置为直接转到h:驱动器。这是批处理文件:

start explorer /e,/select,%1

这有效,击键次数更少。或者,如果起初不起作用,请按Enter键以打开h:根文件夹并显示内容。或者,在存在子文件夹“ sub”的地方键入“ ex h:\ sub”。

最近,这个问题似乎变得更加严重,这可能是由于Windows XP安全修补程序之一所致。

要尝试的另一件事是在服务器端。在Windows服务器上,修改注册表项应该可以防止服务器在超时时断开其连接。我几乎在所有服务器上都这样做。该文件是:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]
"autodisconnect"=dword:ffffffff

从另一个用户运行的进程中,start explorer只有两个用户都具有“在一个单独的进程中运行文件夹窗口”设置时,它才起作用。
ivan_pozdeev

1

我遇到了类似的问题,发现我可以从命令行(其中X:是已映射但已断开连接的驱动器)强制使用简单的“ dir x:”重新连接。这是从Server 2003系统到XP和Win7上的已映射驱动器电脑。

我用以下两行创建了一个批处理文件wake_network_drives.bat:

    dir x:
    dir z:

并设置计划的任务,使其在备份程序失败之前每晚运行一次,因为该驱动器有时显示为已断开连接。


这可行。即使该dir命令给您一个错误,它也会唤醒断开连接的网络驱动器。这是他们所有人的最佳答案。
艾略特·卡梅隆

0

只需输入:

NET USE H: \\server\share

(其中H:当然是您的驱动器号)

输入'NET /?USE”以查看此命令为您提供的所有选项。


这是行不通的。该驱动器号已被映射,只是断开了连接(通常另一台计算机已重新启动)。运行此命令时,它抱怨该设备已在使用中。
史蒂芬·詹宁斯

是的,我刚刚对此进行了测试,并得到“本地设备名称已在使用中”。
Stephen Jennings

1
它对我有用...但是我在Windows 7上,实际上驱动器自行重新连接...尝试NET USE H:简单(无路径),应该可以恢复连接。我忘记了XP中的情况。
Zoran

0

如果您不反对将这些密码以纯文本格式批量保存,则可以编写一个删除脚本并重新映射包括凭据的脚本。

net use H: /delete
net use H: \\server\share /user:domain\user password /persistent:yes

我知道这不符合您不删除共享的要求,但是它解决了必须记住密码的问题的根源。


作为一名IT专业人员,我本人和用户都感到反对。
ivan_pozdeev

0

TL; DR摘要:使用net useif exist

创建每晚备份脚本时遇到了一个相关问题。它必须检查计算机是否已打开(使用ping),发送魔术包以在需要时将其打开(使用MC-WOL),等待Windows引导,然后建立与SMB共享的连接并等待它在场。

尽管这里的其他答案很好,但我不希望映射的驱动器号突然出现/消失,也不想断开用户可能正在使用的所有操作,也不希望资源管理器窗口四处闪烁。即目标是零用户分心

以下代码段可能对您有帮助:

set TARGET_IP=192.168.1.3
set TARGET_PATH=\\%TARGET_IP%\d$\backups
set ATTEMPTS=0

:LOOP

REM Give up eventually
if %ATTEMPTS% GEQ 200 goto NOJOY

REM Wait for IP connectivity to host, and/or burn up a couple seconds before retry
ping -n 1 -w 2000 %TARGET_IP% | find "TTL" > nul
if errorlevel 1 set /a ATTEMPTS+=1 & goto LOOP

REM See if we're already connected, and try to give it a kick
if exist %TARGET_PATH% goto CONNECTED

REM Try to reconnect
net use %TARGET_PATH% > nul
if errorlevel 1 set /a ATTEMPTS+=1 & goto LOOP

:CONNECTED
echo Connected
exit /b

:NOJOY
echo Couldn't connect

如果愿意,可以将上面的IP地址替换为主机名(例如server1)。

net use如果不存在现有连接,则需要。我遇到了一些极端的情况,仅靠这种情况似乎不足以“唤醒”共享(例如,如果以前的连接处于断开状态)。我发现if exists指令有在其他的答案(如提到的替代类似的效果pushddirExplorer,等),但它似乎是一个更轻的方法。


0

StanZ的答案对我有用,但是我必须能够以编程方式确定任何映射的驱动器而状态为“不”,因为我们域中的用户获得了不同的驱动器映射。我在这里进行编码以作为独立版本运行,该版本net use在实际代码之前和之后执行,以便您可以看到结果,但是您只需要将一个FOR语句(三行)复制到代码中即可获得所需的结果。

@ECHO OFF
::  
:: revision of answer from StanZ on superuser.com at the following url  
:: https://superuser.com/questions/52595/can-a-mapped-network-drive-be-reconnected-from-the-command-line/367910#367910  
:: https://superuser.com/a/367910  
:: which resulted in my  
::  
:: DriveStatusOK.bat  
:: iCharlieC  
::  
SETLOCAL ENABLEEXTENSIONS  
::  
:: you need only copy the one FOR statement (three lines)  
::   to use in your own code  
::   to force status of mapped network drives to OK  
::  
:: "tokens=1-2 delims=: " is used in the for statement  
:: to output only the drive letter from the output of...  
:: net use  
:: is piped to the first findstr which outputs only lines with drive letters  
::   then piped to another findstr to eliminate drives with a status of OK  
::   then piped to another findstr to get lines that start with a status  
::     -in other words, those lines that the first character is a letter-  
::     -this due to the fact that in our domain we have a drive  
::      that is mapped to a letter, but never has a status.  
::      I do not know the reason for this,  
::      but adding that last findstr prevents me from getting an error  
::      from trying to execute a dir on a non-existant drive letter.-  
::   then dir is executed on each drive letter (after appending ":\" to the letter)  
::      and the output redirected to NUL  
::  
:: run net use before as a visual here  
net use  
::  
FOR /F "tokens=1-2 delims=: " %%i in (  
    'net use ^| findstr ":" ^| findstr /i /v "^OK" ^| findstr /i "^[A-Z]"'  
    ) do dir "%%j:" > NUL  
::  
:: run net use after "waking" drive(s)  
net use  
::  
ENDLOCAL  

0

也许这是一个古老的问题,但在2017年和Windows 10中仍然有意义,因为Windows共享通常不会由于各种原因而重新连接或正确地附加网络共享。基于此问题,并且没有一个切实可行的完整解决方案,我创建了一个Github项目,其中包含一个Scheduler Task和一个VBS,可以通过尝试在恢复或登录后(如果未连接或在线)后重新连接驱动器来解决此问题。

该脚本是完全可配置的,可以根据实际用户的需要进行设置。

Github项目的路径

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.