Скрипт для отключения сопоставленного сетевого расположения

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

Другие вопросы по тегам