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