Скрипт для отключения сопоставленного сетевого расположения
У меня есть пользователь, которому нужно сопоставить определенное местоположение в сети, чтобы диск O:
, Время от времени этот диск теряет свою карту O:
, но будет отображаться под разными буквами, такими как H:
, K:
, а также L:
, Нормальная процедура для него - позвонить в службу поддержки (мне), чтобы он спустился и распаковал / переназначил диск на нужную букву.
Во время процесса переназначения я проверяю флажок Remap on login
но эта настройка, кажется, не закрепилась.
Есть ли способ написать эту задачу? Обычно я бы использовал net use /delete \\server\share
или же net use x: /delete
(где x: буква диска), но первая не работает, так как пути назначена буква, а вторая не работает, так как буква, на которую она сопоставляется, не всегда одна и та же.
Система - Windows NT (мы используем специализированное программное обеспечение, которое давно не обновлялось).
2 ответа
Пока нет других общих ресурсов, которые вы пытаетесь сохранить, вы можете использовать следующее в пакетном или входном скрипте:
NET USE * /delete
NET USE O: \\server\share
Это удалит все назначенное (*
) разделяет и устанавливает его на диск / путь, который вы хотите.
Чтобы определить букву диска, к которому в данный момент назначен общий ресурс, и разархивировать его:
@echo off
for /f "tokens=2" %%D in ('net use ^| find ":" ^| find "\\server\share") do net use %%D /delete
Комментарии:
^
как\
в Unix - это превращает следующий символ из специального в не специальный или наоборот. Мы используем^|
так что интерпретация|
символы откладываются до тех пор, пока команда в скобках не будет проанализирована.%%D
этоFOR
переменная индекса цикла. Вы можете использовать любую нужную букву, но, в отличие от обычных переменных командной строки Windows,- это может быть только одна буква, поэтому не пытайтесь использовать
%%DRV
, а также - он чувствителен к регистру.
- это может быть только одна буква, поэтому не пытайтесь использовать
- Я включил
find ":"
потому что, когда я тестировал это, я получилnet use
вывод, который выглядел как
OK H: \\WONDERLAND\HUMPTYDUMPTY OK Q: \\WONDERLAND\QUEENOFHEARTTS OK \\WONDERLAND\CHESHIRECAT
Поэтому вам нужно что-то сделать, чтобы отфильтровать строки, в которых нет буквы диска.
- Как вы знаете (потому что я намекал на это выше),
FOR
это конструкция цикла Ваши операторы выполняются один раз для каждой строки, которая выходит изnet use ... | find
трубопровод, с%%D
установить вторую строку (токен) в строке. Если вы хотите выполнить более одной команды и / или быть более избирательным, вы можете сделать это:
for / f "tokens = 2" %% D in ('net use ^ | find ":" ^ | find "\\ server \ share") do (... если %%D==Z: ( ...) еще ( ...) ...)
Хочу больше? + Изменить "tokens=2"
в "tokens=2,3"
, а также %%E
будет установлен третий токен; то есть UNC, которому сопоставлена буква диска.