1

Как можно перекодировать

subst P: /D
subst P: D:\mydir

такой, что второй прогон не удаляет диск без необходимости, т.е. если диск уже подставлен в этот путь?

Кратковременное удаление диска мешает представлению Проводника, которое я наблюдаю за этим диском.

1 ответ1

1

Итак, вам определенно нужна полная проверка того, что P: перенаправлен на D:\mydir

Вы можете сделать это следующим образом (сохранить как пакетный файл):

@echo off
subst | findstr /C:"P:\\: => D:\\MYDIR" 1> nul
if errorlevel 1 (
  echo. P-drive not mapped to D:\mydir
  echo. remapping P:\
  subst P: /D 1> nul
  subst P: D:\mydir
) else (
  echo. P-drive already mapped to D:\mydir
)

Он проверяет (с помощью команды subst и findstr), сопоставлен ли P: с D:\mydir .
(обратите внимание на двойной \ в чеке с помощью findstr)
(также обратите внимание, что subst всегда возвращает путь во всех заглавных буквах)

  • если P:\: => D:\MYDIR отсутствует в subst тогда нам нужно переназначить.
  • subst P: /D 1> nul удаляет текущий P:
    (и подавляет любое сообщение об ошибке в случае, если P: не был сопоставлен)
  • Затем с помощью subst P: D:\mydir мы сопоставляем диск
    (сообщение об ошибке не должно появляться, так как мы только что удалили любое P-отображение)
  • Вы можете удалить эхо-строки, если вы не хотите их

Пожалуйста, проверьте ваш вывод subst чтобы убедиться, что он соответствует формату, который я здесь использовал. Так:
P:\: => D:\MYDIR
(если нет, пожалуйста, измените пакетный файл соответственно)

Редактировать:
Вот пересмотренная (и параметризованная) версия. Вы можете назвать это как remap P: D:\mydir . Новая версия не чувствительна к регистру. Это добавляет двойной \ к параметрам findstr . Заранее проверяется, существует ли каталог (он не может содержать косую черту).

@echo off
if "%2"=="" (
  echo. Call with: %0 drive: destination-direcory
  exit/b
)
if not exist "%2\." (
  echo. The destination directory does not exist
  exit/b
)
SET drive=%1\\
SET dest=%2
SET dest=%dest:\=\\%
subst | findstr /I /R /C:"^%drive%: => %dest%$" 1> nul
if errorlevel 1 (
  echo. %1-drive not mapped to %2
  echo. remapping %1
  subst %1 /D 1> nul
  subst %1 %2
) ELSE (
  echo. %1-drive already mapped to %2
)

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