2

У меня есть пользователь, которому нужно сопоставить определенное местоположение в сети для диска O: Время от времени этот диск теряет свою карту в O: но будет отображаться под разными буквами, такими как H: K: и L: Обычная процедура для него - позвонить в службу поддержки (мне), чтобы он сошел и распаковал / переназначил диск на нужную букву.

Во время процесса переназначения я проверяю флажок Remap on login но этот параметр, похоже, не вступает в силу.

Есть ли способ написать эту задачу? Обычно я бы использовал net use /delete \\server\share или net use x: /delete (где x: буква диска), но первый не работает, поскольку букве назначен путь, а второй не работает, так как буква, на которую он переназначается, не всегда одна и та же.

Система - Windows NT (мы используем специализированное программное обеспечение, которое давно не обновлялось).

2 ответа2

3

Пока нет других общих ресурсов, которые вы пытаетесь сохранить, вы можете использовать следующее в пакетном или входном скрипте:

 NET USE * /delete
 NET USE O: \\server\share

Это удалит все назначенные (*) общие ресурсы и установит его на нужный вам диск / путь.

1

Чтобы определить букву диска, к которому в данный момент назначен общий ресурс, и отменить его отображение:

@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\QUEENOFHEARTS
OK                        \\WONDERLAND\CHESHIRECAT

Поэтому вам нужно что-то сделать, чтобы отфильтровать строки, не содержащие буквы диска.

  • Как вы, возможно, знаете (потому что я намекал на это выше), FOR - это конструкция цикла.  Ваши операторы выполняются один раз для каждой строки, которая выходит из net use ... | find конвейер с %%D установленным на вторую строку (токен) в строке.  Если вы хотите выполнить более одной команды и / или быть более избирательным, вы можете сделать это:
for /f "tokens=2" %%D in ('net use ^| find ":" ^| find "\\server\share") do (
    ...
    if %%D==Z: (
        ...
    ) else (
        ...
    )
    ...
)

Хочу больше?  Измените "tokens=2" на "tokens=2,3" , и %%E будет установлен на третий токен; то есть UNC, которому сопоставлена буква диска.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .