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