Можно ли повторно подключить сетевой диск из командной строки?


32

Ежедневно я нахожусь в командной строке Windows, нуждающейся в доступе к сетевому диску, который сопоставлен, но отключен. Я до сих пор не нашел команду, которая будет повторно подключать этот диск без сопоставления и повторного сопоставления (что приводит к игре в угадывание пароля, так как я не владею этими компьютерами). Я также хотел бы иметь возможность написать это так, чтобы каждую ночь привод снова подключался, если он каким-либо образом отключался.

Самое быстрое решение, которое у меня сейчас есть, это:

  1. Тип " start.", чтобы открыть проводник,
  2. Alt- Dсфокусировать адресную строку,
  3. введите нужную букву диска и нажмите клавишу ввода и дождитесь, пока она отобразит содержимое диска,
  4. затем, наконец, закройте проводник и вернитесь в командную строку.

Я знаю, что это незначительное неудобство, но я часто делаю это через медленное соединение VNC или PCAnywhere, где делать что-либо через GUI ужасно, поэтому мне просто интересно, есть ли лучшее решение.


1
Что происходит, когда вы `dir h: \`?
wfaulk

3
Вместо ввода «start. <Enter>» вы можете просто сделать win-E и сохранить 5 нажатий клавиш ;-)
fretje

1
Я «решил» это, просто используя путь \\ server \ share вместо подключенного диска. Вы можете просто скопировать файлы, если вам нужно. (Это была моя проблема)
Peterdk

Ответы:


12

Может попробовать pushd \\server\share?


2
Я не уверен, что это то, что мне нужно. Pushd выглядит так, как будто создает временные буквы дисков; У меня уже есть сопоставленная буква диска, но общий ресурс отключен (в проводнике он помечен красным крестиком и помечен как «Отключенный сетевой диск»). Возможно я ошибаюсь.
Стивен Дженнингс

Да, я думал, что доступ к нему таким образом может подтолкнуть диск к повторному подключению. Вы можете использовать, popdчтобы удалить букву диска.
wfaulk

Я попробую это в следующий раз, когда столкнусь с этим. Я подозреваю, что он либо не сможет сказать, что устройство используется, либо подключит неправильную букву диска к общему ресурсу.
Стивен Дженнингс

2
Я попробовал это, и это действительно сработало. Сначала я запустил pushd к общему ресурсу, а затем popd, чтобы удалить дополнительную букву диска, и обнаружил, что подключенный диск снова подключен. Это определенно положительный отзыв, и если я не получу краткий ответ через пару дней, он будет принят.
Стивен Дженнингс

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 с последними патчами.
prl77

Примечание. Если вышеприведенные параметры taskkill не работают, попробуйте использовать TASKLIST / FI "IMAGENAME eq explorer.exe" / V, чтобы увидеть правильный заголовок окна. Моя строка фильтра для TASKKILL оказалась "windowtitle eq c $ *"
Луки

Спасибо Люк за ваш комментарий. Это действительно помогло мне
Павел

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
          )
     )
 )

Учитывая, что мы не знаем уровень квалификации ОП, возможно, было бы неплохо расширить ваш ответ.
Тог

net useу меня работает для недоступных подключенных дисков в Win7. ты
Мат М

1
У меня пока нет возможности понизить голосование, но этот ответ ничего не сделал для меня. Посмотрите пост ниже Клауса Меландера, который сделал. Я также оставил комментарий там.
prl77

1
Он работает (протестировано с win7 x64), но зависит от того net use, какой вывод зависит от языка Unavailable. Но для немецкого win7, который вы получаете Nicht verfgb, вам нужно изменить решение на свой язык
Джеб

Это сработало для меня, за исключением одного общего ресурса с пробелом в сетевом пути ... В любом случае, я просто закончил делать несколько жестко запрограммированных строк "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).
Стивен Дженнингс

1
Weird. Клянусь, это работает для меня.
wfaulk

это работает и для меня!
Снарк

Я признаю, что видел эту работу время от времени, но в большинстве случаев это не так. Я не знаю, что так или иначе определяет, возможно, есть ли сохраненные учетные данные.
Стивен Дженнингс

1
Бьюсь об заклад, вот и все. Я автоматически аутентифицируюсь, используя свои учетные данные домена.
wfaulk

4

Я знаю, что вы сказали, что «чистое использование» не работает для вас - но вот что вы можете попробовать.

Запустите командный файл с параметром net use / DELETE, чтобы удалить существующие / постоянные подключения. Затем можно использовать net use с параметром / SAVECRED, чтобы повторно использовать учетные данные passowd, использованные при последнем успешном входе в систему. Я не уверен, решит ли это вашу проблему, но стоит посмотреть.


Это не совсем то, что мне нужно, но это определенно полезно знать. Это решает еще одну проблему, которая у меня была.
Стивен Дженнингс

2

У меня та же проблема с несколькими подключениями, и она прерывистая. Когда я перезагружаю компьютер, иногда соединение "хорошее", а иногда нет. У меня нет проблемы с паролем, так как я нахожусь в локальной сети компании, но все же у меня есть другой аспект проблемы.

Я создал командный файл с именем ex.bat и сохранил его (наряду со многими другими вещами) в каталоге \ util, который я указал в своем пути. Я могу набрать «ex h:», и он запустит Windows Explorer и настроит его для прямого перехода на диск h :. Вот командный файл:

start explorer /e,/select,%1

Это работает, с гораздо меньшим количеством нажатий клавиш. Или, если он сначала не работает, нажмите клавишу Enter, чтобы открыть папку h: root и отобразить ее содержимое. Или введите «ex h: \ sub», где существует подпапка «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

У меня была похожая проблема, и я обнаружил, что могу принудительно переподключиться с помощью простого «dir x:» из командной строки (где X: был подключенный, но отключенный диск.) Это было из системы Server 2003 с подключенными дисками на XP и Win7 компьютеры.

Я создал командный файл wake_network_drives.bat с этими двумя строками:

    dir x:
    dir z:

и задайте запланированное задание, чтобы оно выполнялось по ночам до сбоя программы резервного копирования, поскольку диски иногда отображались как отключенные.


Это работает. Даже если dirкоманда выдает ошибку, она может разбудить отключенный сетевой диск. Это лучший ответ из всех.
Эллиот Кэмерон

0

Просто введите:

NET USE H: \\server\share

(где H: ваша буква диска, конечно)

Тип 'NET /? USE ', чтобы увидеть все опции, которые дает эта команда.


Это не работает. Буква диска уже сопоставлена, она просто отключена (обычно другой компьютер был перезагружен). Когда вы запускаете это, он жалуется, что устройство уже используется.
Стивен Дженнингс

Да, я только что проверил это и получил «Имя локального устройства уже используется».
Стивен Дженнингс

1
Это работает для меня ... но я на Windows 7, и на самом деле диск переподключается сам ... Попробуйте NET USE H: простой (без пути), который должен восстановить соединение. Я забыл, как это было в XP.
Зоран

0

Если вы не против хранить эти пароли в виде простого текста в пакете, вы можете написать сценарий удаления и переназначения, включая учетные данные.

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

Я знаю, что это не соответствует вашему требованию не удалять общий ресурс, но это решает корень проблемы запоминания паролей.


Как ИТ - профи, я имею против, и для меня и для моих пользователей.
ivan_pozdeev

0

TL; DR сводка: использование net useиif 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директива имеет такой же эффект , как альтернативы , упомянутые в других ответах (как pushd, dir, Explorerи т.д.), но это казалось светлее веса подход.


0

Ответ от StanZ работал для меня, но я должен был иметь возможность программно определять любые подключенные диски без статуса OK, так как пользователи в нашем домене получают различные сопоставления дисков. Я написал здесь для запуска в качестве автономной версии, которая выполняется 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, потому что сетевые ресурсы часто не подключаются или подключаются с помощью окон по разным причинам. Основываясь на этой проблеме и отсутствии реального практичного и полноценного рабочего решения, я создал проект Github, который содержит задачу планировщика и VBS, который решает проблему, просто пытаясь повторно подключить диски после возобновления или входа в систему, если он не подключен или не подключен к сети.

Скрипт полностью настраивается и может быть настроен в зависимости от потребностей реального пользователя.

Путь к проекту Github

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.