суббота, 25 октября 2014 г.

Как быстро и удобно подключить сетевой диск в Windows

А сейчас, дети, я расскажу вам историю про одну умненькую собачку (по китайскому гороскопу), которой надоело каждый раз руками тащить курсор мыши к значку "Мой компьютер", щёлкать там правой кнопкой, выбирать "Подключить сетевой диск" и писать логин/пароль. Тогда этот кобель решил, по примеру грифа из мультика "Крылья ноги и хвосты", день потерять, зато потом за пять минут долететь :-)

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

Кому интересно - follow the rabbit, а как же.


На моём "карманном" файловом сервере есть несколько расшаренных в сеть каталогов: distr (там, понятно, дистрибутивы разных программ, тысячи их), oleg_backup (это мой личный) и it (для сотрудников нашего отдела).

Поначалу у меня для подключения каждого каталога был отдельный скрипт, потому что и логины/пароли разные, и буквы для сетевых дисков назначались разные, чтобы не путаться. Но я тут подумал, в свободное от отдыха время, и придумал как свести всё это в один файл. И, как мне кажется, получилось. Правда, ещё не проверял, как оно работает, дома же сочинял.

Скрипт называется connect.cmd и ему для запуска нужны два параметра - идентификатор сетевого каталога и ещё один, чтобы понимать - подключать или отключать сетевой диск. То есть команда запуска выглядит так: connect.cmd distr on (подключает каталог distr) или connect.cmd distr off (отключает каталог distr).


@ECHO OFF
SETLOCAL

REM Проверка подключенных сетевых дисков, если есть - вывести сообщение и выйти
IF EXIST Z:\nul (
 SET CONNECTED_DRIVE=Z:
 GOTO ERROR1
 )
IF EXIST O:\nul (
 SET CONNECTED_DRIVE=O:
 GOTO ERROR1
 )
IF EXIST Y:\nul (
 SET CONNECTED_DRIVE=Y:
 GOTO ERROR1
 )

REM Установка буквы сетевого диска в зависимости от параметра %1
IF %1 EQU install (
    SET %DRIVE%=Z:
 GOTO INSTALL
 )
IF %1 EQU distr (
 SET %DRIVE%=Z:
 GOTO DISTR
 )
IF %1 EQU oleg (
 SET %DRIVE%=O:
    GOTO OLEG
 )
IF %1 EQU it (
    SET %DRIVE%=Y:
 GOTO IT
 )

REM И так всё ясно :-)
IF %2 EQU off GOTO OFF

REM Если введены неправильные параметры (то есть не совпали ни с одним IF)  - сообщение об ошибке и выход
ECHO Please enter correct parameters
PAUSE
GOTO END

REM Установка переменных в зависимости от входных параметров
:INSTALL
SET DIRECTORY=distr
SET USERNAME=install
SET PASSWORD=install
GOTO CONNECT

:DISTR
SET DIRECTORY=distr
SET USERNAME=distr
SET PASSWORD=distr
GOTO CONNECT

:OLEG
SET DIRECTORY=oleg_backup
SET USERNAME=oleg
SET PASSWORD=password
GOTO CONNECT

:IT
SET DIRECTORY=it
SET USERNAME=it
SET PASSWORD=password
GOTO CONNECT

REM Подключение сетевого диска с использованием выше установленных переменных
:CONNECT
NET USE %DRIVE% \\192.168.0.1\%DIRECTORY% /user:%USERNAME% %PASSWORD% /persistent:no
START C:\totalcmd\totalcmd.exe %DRIVE%\
GOTO END

:OFF
IF EXIST %DRIVE%\nul NET USE %DRIVE% /d /y
GOTO END

:ERROR1
ECHO Drive %CONNECTED_DRIVE% already connected.
ECHO Please close any documents at drive %CONNECTED_DRIVE%, disconnect it and try again.
PAUSE
GOTO END

:END

На мой взгляд всё должно работать.

Теперь о том, как со всем этим взлететь как это удобно запускать. Есть небольшая, но очень удобная программа Type And Run, которая по нажатию горячих клавиш выводит окошко "консоли", в котором надо написать команду. Точнее, алиас команды, её "творческий псевдоним". Алиасы создаются в редакторе алиасов, как ни удивительно. Вот там и пишем примерно следующее:
  • Сначала нажать "Создать новый алиас"
  • В поле "Имя алиаса" написать, скажем, "distrON"
  • Вписать (а лучше найти кнопкой "обзор", такая с тремя точками) путь до скрипта, где там он будет лежать. У меня обычно D:\program\cmd\connect.cmd
  • В поле "Параметры" вписать distr on
  • Нажать ОК

Подобным образом создать алиасы "distrOFF" (в параметрах написать distr off), "installON", "installOFF" и остальные.

И всё! Теперь, вызвав консольку нажатием горячих клавиш, начинаем писать там "di", а программа сама подставляет из списка алиасов похожий, например, "distrOFF". Нам нужен "distrON"? Не проблема - нажимаем TAB, и программа начинает перебор алиасов, начинающихся с "di".

В общем, это дольше рассказывать, надо пользоваться. Я уже давно на все свои компьютеры ставлю Type and Run в обязательном порядке и практически забыл про запуск программ из меню Пуск или ярлыками с Рабочего стола. Быстрее нажать Ctrl+~ (я вешаю вызов консоли на это сочетание), набрать "cr", программа подставит "chrome". Нажимаю Enter - запускается Google Chrome. Набираю "th" - подставляется Thunderbird. Ну, и так далее.

А ещё она умеет быть калькулятором! То есть если в консольке Type and Run написать "2+2*2" и нажать Enter, то программа посчитает и напишет... Правильно напишет, в отличие от калькулятора Windows.

UPDATE

Так, всё вышенаписанное - выкрасить, высушить и выбросить! Не, идея была правильная, но реализация таки оказалась с ошибками. Правильный, проверенный в работе скрипт вот:


@ECHO OFF
SETLOCAL

IF "%2" == "" GOTO MISSING_PARAMETERS
IF %2 == on GOTO ON_SECTION
IF %2 == off GOTO OFF_SECTION
GOTO MISSING_PARAMETERS



REM === Start ON_SECTION ===
:ON_SECTION
REM Проверка подключенных сетевых дисков, если есть - вывести сообщение и выйти
IF EXIST Z:\nul (
 SET DRIVE=Z:
 GOTO ERROR1
 )
IF EXIST O:\nul (
 SET DRIVE=O:
 GOTO ERROR1
 )
IF EXIST Y:\nul (
 SET DRIVE=Y:
 GOTO ERROR1
 )

REM Установка буквы сетевого диска в зависимости от параметра %1
IF "%1" == "" GOTO MISSING_PARAMETERS
IF %1 == install (
    SET DRIVE=Z:
 GOTO INSTALL
 )
IF %1 == distr (
 SET DRIVE=Z:
 GOTO DISTR
 )
IF %1 == oleg (
 SET DRIVE=O:
    GOTO OLEG
 )
IF %1 == it (
    SET %DRIVE%=Y:
 GOTO IT
 )
REM Если введены неправильные параметры (то есть не совпали ни с одним IF)  - сообщение об ошибке и выход
GOTO MISSING_PARAMETERS

REM Установка переменных в зависимости от входных параметров
:INSTALL
SET DIRECTORY=distr
SET USERNAME=install
SET PASSWORD=install
GOTO CONNECT

:DISTR
SET DIRECTORY=distr
SET USERNAME=distr
SET PASSWORD=distr
GOTO CONNECT

:OLEG
SET DIRECTORY=oleg_bkup
SET USERNAME=oleg
SET PASSWORD=password
GOTO CONNECT

:IT
SET DIRECTORY=it
SET USERNAME=it
SET PASSWORD=password
GOTO CONNECT

REM Подключение сетевого диска с использованием выше установленных переменных
:CONNECT
NET USE %DRIVE% \\192.168.0.1\%DIRECTORY% /user:%USERNAME% %PASSWORD% /persistent:no
START C:\totalcmd\totalcmd.exe %DRIVE%\
GOTO END
REM === End ON_SECTION ===



REM === Start OFF_SECTION ===
:OFF_SECTION
IF "%1" == "" GOTO MISSING_PARAMETERS
IF %1 == install (
    SET DRIVE=Z:
 GOTO OFF
 )
IF %1 == distr (
 SET DRIVE=Z:
 GOTO OFF
 )
IF %1 == oleg (
 SET DRIVE=O:
    GOTO OFF
 )
IF %1 == it (
    SET %DRIVE%=Y:
 GOTO OFF
 )
GOTO MISSING_PARAMETERS

:OFF
IF EXIST %DRIVE%\nul (
   NET USE %DRIVE% /d /y
   ) ELSE (
   ECHO Диск %DRIVE% в настоящий момент не подключен.
   PAUSE
   )
GOTO END
REM === End OFF_SECTION ===



REM === Start ERROR_SECTION ===
:MISSING_PARAMETERS
ECHO Для корректной работы скрипту должны быть переданы ДВА параметра!
ECHO Первый параметр может быть: "distr", "install", "oleg" или "it".
ECHO Второй параметр должен быть либо "on", либо "off".
ECHO Параметры вводятся без кавычек.
ECHO .
PAUSE
GOTO END

:ERROR1
ECHO Диск %DRIVE% уже существует.
ECHO Пожалуйста, закройте все открытые файлы на диске %DRIVE%, отключите его, и повторите попытку.
PAUSE
GOTO END
REM === End ERROR_SECTION ===


:END

Комментариев нет :

Отправить комментарий