Итак, вам определенно нужна полная проверка того, что 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
)