Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/12: Рейтинг темы: голосов - 12, средняя оценка - 4.92
rust-resisting
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 44
1

Работа с сетевыми дисками

08.04.2015, 16:40. Просмотров 2387. Ответов 3
Метки нет (Все метки)

Господа, доброго времени суток.
Допек себя до того, что никак не могу без внедрения на форум решить один вопрос =)
Ситуация такая, BAT'ник работает с сетевыми дисками через VPN, пользователи батника (сотрудники) по-умолчанию - не должны разбираться в работе батника, пользуясь его стандартными функциями. И все хорошо, все работает, то есть работало, пока один из сотрудников не сказал - "у меня не работает". Упарились, выпрашивая у него причины, но все лгут (с). Оказалось, что он руками не подключил сетевые папки, как диски, отсюда и пошли пляски.
Как у меня это все работает.
Есть сетевая папка "Проекты" и папка "Документы", которые необходимо подключить как диск.
Поехали:
1. Пользователь подключает папки как диски
2. В батнике функционально указывает назначенные буквы для этих дисков
3. Работает с БАТником совершенно спокойно (указав буквы дисков, батник их превращает в переменные, которые уже гуляют по батнику свободно).
Для особо "лютых" батник сразу показывает через net use список подключенных дисков, например:

OK X: \\192.168.1.3\Документы Microsoft Windows Network

Но так как не все у нас оказались "продвинутыми", и начинают работать с батником, не подключив диски, очень хочу реализовать функцию самодиагностики. Теперь задача. Спасайте, а то мозг взорвется. Что хочу видеть.

1. Запускаем батник
2. Батник проверяет наличие подключенных папок как дисков
3. Если в этом списке нет папки "Проекты" (пример), батник начинает ругаться.

Вопрос - как проверить наличие подключенного диска "Проекты" (пример), буква которого неизвестна? Из констант только сетевой адрес и название папки, которая должна быть подключена.
Я уже извелся =( извращения типа net use>>folders.txt, а дальше findstr "Проекты" и бла бла бла - это вообще правой ногой левое ухо =( да и с кириллицей при транспортировке отклика от net use - проблемы.

Ну а если из строки (пример)

OK X: \\192.168.1.3\Документы Microsoft Windows Network

каким-то образом можно будет сразу вытащить после "самодиагностики" еще и букву диска этой папки, чтобы загнать ее в переменную, лишив пользователя вообще какого либо удовольствия от "предварительной настройки", то я вообще буду прыгать от счастья!

Добавлено через 2 часа 20 минут
Сделал правой ногой левое ухо... =(

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
:options
cls
@echo.
cls
echo СБОР СЕТЕВЫХ ДАННЫХ... 
net use>log.txt
cls
@echo.
findstr проекты log.txt>>PROping.txt
findstr документы log.txt>>DOCping.txt
:: ВЫСЧИТЫВАЕМ ЧИСЛО СТРОК
for /f %%Q in ('find /v /c "" ^<PROping.txt') do set PROping=%%Q
for /f %%R in ('find /v /c "" ^<DOCping.txt') do set DOCping=%%R
 
if '%PROping%' GEQ '1' (
echo СЕТЕВОЙ ДИСК "ПРОЕКТЫ" ПОДКЛЮЧЕН.
) else (
echo ПОДКЛЮЧИТЕ СЕТЕВОЙ ДИСК "ПРОЕКТЫ"
)
if '%DOCping%' GEQ '1' (
echo СЕТЕВОЙ ДИСК "ДОКУМЕНТЫ" ПОДКЛЮЧЕН.
) else (
echo ПОДКЛЮЧИТЕ СЕТЕВОЙ ДИСК "ДОКУМЕНТЫ"
)
pause
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2015, 16:40
Ответы с готовыми решениями:

Управление сетевыми портами через реестр
Управление сетевыми портами через реестр - на сколько это возможно? Возможно ли где то в реестре...

Как настроить сеть с двумя сетевыми картами и модемами
У меня такая проблем ка. В офисе 6 пк - 1 ноут, 1 сервер 5 пользователи. 5 пк присоединены к...

Как с помощью bat-файла управлять сетевыми устройствами?
Допустим на компьютере (XP X86) есть LAN (вставлен кабель раздающий инет) и беспроводной адаптер...

Можно ли сделать из компьютера с двумя сетевыми картами маршрутизатор на 2 сети?
Есть XP с 2 сетевыми картами. Можно ли сделать с нее маршрутизатор на 2 сетки?

Создать файл с сетевыми параметрами и настроить кодовую страницу на его чтение в Блокноте
Создать файл с сетевыми параметрами и настроить кодовую страницу на его чтение в блокноте...

3
Dragokas
Эксперт WindowsАвтор FAQ
17106 / 7161 / 862
Регистрация: 25.12.2011
Сообщений: 10,959
Записей в блоге: 16
09.04.2015, 10:29 2
В дополнение: VBS-скрипт для монтирования/отключения сетевых папок в качестве дисков.

Кликните здесь для просмотра всего текста

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
' Монтирует сетевое уст-во. Возвращает букву диска в случае успеха
Function MountShare(Share)
    Dim FSO, oNetwork, oDrive, sDrvMap, sDriveLetter
 
    sDrvMap = "DEFGHIJKLMNOPQRSTUVWX"   ' поиск свободной буквы диска
    Set FSO = CreateObject("Scripting.FileSystemObject")
    For Each oDrive In FSO.Drives
        sDrvMap = Replace(sDrvMap, oDrive.DriveLetter, "", 1, 1)
    Next
    sDriveLetter = Left(sDrvMap, 1)
 
    If sDriveLetter <> vbNullString Then
        Set oNetwork = CreateObject("Wscript.Network")
        On Error Resume Next
        oNetwork.MapNetworkDrive sDriveLetter & ":", Share
        If Err = 0 Then MountShare = sDriveLetter Else msgbox Err & " " & Err.Description
    End If
End Function
 
' Возвращает ноль в случае успеха
' force - Если указано True, отключение будет произведено вне зависимости от того, используется ресурс в настоящий момент или нет.
Function UnMountShare(sDriveLetter, Force)
    Dim oNetwork
    
    Set oNetwork = CreateObject("Wscript.Network")
    On Error Resume Next
    oNetwork.RemoveNetworkDrive sDriveLetter & ":", Force
    UnMountShare = Err.Number
End Function


Пример использования

Кликните здесь для просмотра всего текста

Дописать этот код рядом с кодом функций монтирования.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
' демонстрация использования
call test
sub test()
    Dim NetShare, sDriveLetter    
    
    NetShare = "\\192.168.12.6\общие документы"
 
    ' подключаем 
    sDriveLetter = MountShare(NetShare)
 
    If sDriveLetter <> "" Then
        MsgBox sDriveLetter & " - mounted successfully."
 
        ' отключаем
        if UnMountShare(sDriveLetter, false) = 0 then
            MsgBox sDriveLetter & " - unmounted successfully."
        end if
 
    End If
end sub


Вызов VBS файла из батника:
Windows Batch file
1
cscript.exe //nologo Mount.vbs
1
rust-resisting
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 44
09.04.2015, 15:08  [ТС] 3
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Допилил код, вытащил из искомых строк положение буквы диска от начала строки и перекинул ее в переменную, теперь зависимости от буквы у пользователя нет, может назвать любой приглянувшейся =)

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
echo БУДЕТ ПРОВЕДЕНА ПРОВЕРКА ПОДКЛЮЧЕНИЯ К СЕТЕВЫМ ДИСКАМ... 
@echo.
pause
::ПИШЕМ В ЛОГ ДАННЫЕ NET USE 
net use>log.txt
cls
@echo.
::ИЩЕМ В ЛОГАХ ИНТЕРЕСУЮЩИЕ СТРОКИ И ЗАГОНЯЕМ В ФАЙЛЫ
findstr проекты log.txt>>PROping.txt
findstr документы log.txt>>DOCping.txt
::ГОТОВИМ ПЕРЕМЕННЫЕ ИЗ НАЙДЕННЫХ СТРОК
for /f %%Q in ('find /v /c "" ^<PROping.txt') do set psearch=%%Q
for /f %%U in ('find /v /c "" ^<DOCping.txt') do set dsearch=%%U
::ВЫКОВЫРИВАЕМ НУЖНОЕ МЕСТО В СТРОКЕ И ЗАГОНЯЕМ В ПЕРЕМЕННУЮ
SetLocal EnableDelayedExpansion
for /f "usebackq delims=" %%a in ("PROping.txt") do set presult=%%a
for /f "usebackq delims=" %%a in ("DOCping.txt") do set dresult=%%a
set pre=%presult:~13,1%
set dre=%dresult:~13,1%
del PROping.txt
del DOCping.txt
del log.txt
if '%psearch%' GEQ '1' (
echo СЕТЕВОЙ ДИСК "ПРОЕКТЫ" ПОДКЛЮЧЕН - %pre%
goto start
) else (
echo ПОДКЛЮЧИТЕ СЕТЕВОЙ ДИСК "ПРОЕКТЫ"
goto mont
)
@echo.
if '%dsearch%' GEQ '1' (
echo СЕТЕВОЙ ДИСК "ДОКУМЕНТЫ" ПОДКЛЮЧЕН - %dre%
goto start
) else (
echo ПОДКЛЮЧИТЕ СЕТЕВОЙ ДИСК "ДОКУМЕНТЫ"
goto mont
)
pause>nul
Добавлено через 57 секунд
Сам монтаж сделал через такую конструкцию. Осталось вогнать в переменную маску сети на случай переезда офиса и смены внутреннего IP

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
:mont
@ECHO.
ECHO НИЖЕ ВЫ МОЖЕТЕ СМОНТИРОВАТЬ НЕДОСТАЮЩИЙ ДИСК.
@echo.
echo ДИСК С ПРОЕКТАМИ -   [1]
echo ДИСК С ДОКУМЕНТАМИ - [2]
echo ДИСК СО СКАНЕРОМ -   [3]
echo ВЫХОД ИЗ НАСТРОЕК -  [4]
@echo.
@echo.
set /p variant="КАКОЙ ДИСК МОНТИРОВАТЬ?"
if '%variant%'=='1' goto hdp
if '%variant%'=='2' goto hdd
if '%variant%'=='3' goto hds
if '%variant%'=='4' goto start
@echo.
:hdp
set /p hdp="УКАЖИТЕ БУКВУ ДИСКА С ПРОЕКТАМИ:"
net use %hdp%: \\192.168.1.3\проекты /persistent:yes
goto options
:hdd
set /p hdd="УКАЖИТЕ БУКВУ ДИСКА С ДОКУМЕНТАМИ:"
net use %hdd%: \\192.168.1.3\документы /persistent:yes
goto options
:hds
set /p hds="УКАЖИТЕ БУКВУ ДИСКА СКАНЕРА:"
net use %hds%: \\192.168.1.3\Scan /persistent:yes
goto options
1
rust-resisting
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 44
09.04.2015, 15:39  [ТС] 4
Итог. Картинка 1 - при отключенном диске "Проекты" (пример), далее - батник монтирует диск и картинка 2 - результат при нормальном запуске.
1
Миниатюры
Работа с сетевыми дисками   Работа с сетевыми дисками  
09.04.2015, 15:39
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2015, 15:39

Работа Windows 7 с сетевыми дисками
Добрый день! На новых компьютерах в организации установлена слегка кастомизированная винда 7...

Windows 2003: подключение и работа с сетевыми дисками до входа в систему.
Здраствуйте. Никак не могу решить следующую задачу: Требуется настроить автоматическое...

Маршрутизация трафика между сетевыми сетевыми интерфейсами
Весь мозг себе сломал, возникла следующая проблемма: Есть Шлюз с ОС Debian. На нем поднято три...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.