Ok, então você definitivamente precisa do cheque completo que P: seja redirecionado para D: \ mydir
Você poderia fazer assim (salvar como arquivo em lotes):
@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
)
Verifica (com o comando subst e findstr ) se o P: já está mapeado para D:\mydir .
(por favor, note o duplo \ no cheque com findstr )
(também observe que subst sempre retorna o caminho em todas em maiúsculas )
- se
P:\: => D:\MYDIRnão estiver presente emsubst, será necessário remapear. - O
subst P: /D 1> nulexclui o atualP:
(e suprime qualquer mensagem de erro no caso deP:não ter sido mapeado) - Em seguida, com
subst P: D:\mydirmapeamos a unidade
(nenhuma mensagem de erro deve aparecer, pois acabamos de excluir qualquer mapeamento P) - Você pode excluir as linhas de eco se não as quiser
Por favor, verifique sua saída de subst para ver se corresponde ao formato que eu usei aqui. Então: P:\: => D:\MYDIR
(se não, por favor, ajuste o arquivo em lote de acordo)
Editar:
Aqui está uma versão revisada (e parametrizada). Você pode chamá-lo como remap P: D:\mydir . A nova versão não faz distinção entre maiúsculas e minúsculas. Adiciona o dobro \ aos parâmetros findstr . Ele verifica de antemão se o diretório existe (não pode conter uma barra final).
@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
)