Evite SUBST / D desnecessário ao configurar o SUBST

1

Como se pode recodificar

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

tal que uma segunda execução não exclua a unidade desnecessariamente, ou seja, se a unidade já estiver subestimada para este caminho?

A remoção momentânea do drive interfere com uma visão do Explorer que eu tenho observado esse drive.

    
por ChrisJJ 10.08.2014 / 01:15

1 resposta

1

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 em subst , será necessário remapear.
  • O subst P: /D 1> nul exclui o atual P:
    (e suprime qualquer mensagem de erro no caso de P: 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
)
    
por 10.08.2014 / 20:13