Aqui está outra abordagem:
@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion
rem get list of disk letters in use
set "_inUseDisks="
for /f "tokens=2 delims==" %%D in ('
wmic logicaldisk get caption /value
') do (
for /F "delims=:" %%d in ("%%D") do (
set "_inUseDisks=!_inUseDisks! %%d"
)
)
echo Disk letters in use %_inUseDisks%
rem get first available disk letter
set "_available="
for %%p in (C D E F G H I J K L M N O P Q R S T U V W X Y Z A B) do (
set "_test=!_inUseDisks:%%p=!"
if "!_test!"=="%_inUseDisks%" (
if not defined _available set "_available=%%p"
rem goto :gotletter
)
)
:gotletter
if "%_available%"=="" (
echo No available disk letter
) else (
rem echo First available disk letter: %_available%:
echo net use %_available%: \computername\sharename /persistent:No
)
No script acima, os loops for
são
-
%%D
para recuperar o valorcaption
; -
%%d
para remover o retorno de carro final no valor retornado:wmic
behavior: cada linha de saída termina com0x0D0D0A
(<CR><CR><LF>
) em vez de comum0x0D0A
(<CR><LF>
) .
Veja WMIC
e FOR /F
de Dave Benham: uma correção para o problema <CR>
à direita
- ordem das letras no ciclo
%%p
alterado; - operacional
net use
é meramente exibido para fins de depuração; removaecho
não antes que depurado.
Próximos recursos (leitura obrigatória, incompleta):
- (referência de comando) Um índice A-Z da linha de comando do Windows CMD
- (particularidades adicionais) Sintaxe da linha de comando do shell do Windows CMD
- (
%~D
,%~d
etc. página especial) Argumentos da linha de comando (parâmetros) - (
set "_REPLWITH=%_ALLOWED:~-1%"
etc.) Extrair parte de uma variável (substring) - (
%variable:StrToFind=NewStr%
etc.) Editar / substituir variável