Em um lote, como especificar um caminho que use um nome de volume em vez de uma letra de unidade?

1

Em um lote, existe uma maneira de especificar um caminho usando o nome do volume em vez de uma letra de unidade? (por exemplo: algo como \\ RECOVERY \ Docs \ ...)

Ou, se não for possível, há uma maneira de verificar se um nome de volume específico pertence a uma letra de unidade específica (por exemplo: se F: \ é RECUPERAÇÃO faça isso mais)

Aqui está o que eu quero fazer: criar um lote que faça backup de uma unidade para outra, mas como as duas unidades (origem e destino) estão em unidades USB removíveis, não posso ter certeza de que as letras da unidade nunca serão alteradas. Copiar o backup para a pasta de trabalho, em vez de o contrário, seria uma falha catastrófica.

    
por tigrou 12.07.2012 / 21:10

1 resposta

2

Pessoalmente, eu usaria WMI (wmic se cmd é uma obrigação) e obter rótulo - > link de letra de unidade de lá. Não é muito difícil de fazer, mas eu concordo com comentários que esse arquivo em lote pode não ser a melhor solução ... para operações de backup tão frágeis. Dito isso, a lógica aqui é chegar rapidamente:

@echo off
set VAR=Source
for /f "skip=1" %%L in ('wmic logicaldisk where volumename^="SourceLabel" Get Caption') do @call :SetVar %%L
set VAR=Destination
for /f "skip=1" %%L in ('wmic logicaldisk where volumename^="DestinationLabel" Get Caption') do @call :SetVar %%L

echo Copying data from %Source% to %Destination%
goto :EOF

:SetVar
set Label=%1
if NOT [%Label%]==[] set %VAR%=%Label%
goto :EOF

Tudo o que você precisa fazer é substituir o SourceLabel pelo rótulo real da unidade de origem, mesmo com o rótulo de destino. Depois de obter referências corretas no comando echo - você pode colocar qualquer outra lógica entre ele e a diretiva "goto: EOF".

    
por 12.07.2012 / 23:19