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:\MYDIR
não estiver presente emsubst
, será necessário remapear. - O
subst P: /D 1> nul
exclui o atualP:
(e suprime qualquer mensagem de erro no caso deP:
não ter sido mapeado) - Em seguida, com
subst P: D:\mydir
mapeamos 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
)