Como obtenho uma lista de letras de unidades e seus rótulos associados em um sistema Windows através de um arquivo bat?
Como obtenho uma lista de letras de unidades e seus rótulos associados em um sistema Windows através de um arquivo bat?
Respostas:
Isso obterá a maior parte:
Net Use
Se você tiver alguma unidade mapeada via subst, também precisará obter:
Subst
Para ser completo, você faria assim no Powershell (se você estiver no Windows 7 ou o instalou):
gwmi win32_LogicalDisk -filter DriveType=4
Você também pode fazer isso no prompt de comando ou em um arquivo em lotes usando o WMI, assim:
wmic logicaldisk get caption,providername,drivetype,volumename
Para usar o diskpart, não há necessidade de criar um arquivo intermediário. Experimentar:
echo list volume | diskpart
@echo off
cls
setlocal enabledelayedexpansion
set "_DRIVE.LETTERS.FREE=Z Y X W V U T S R Q P O N M L K J I H G F E D C B A "
for /f "skip=1 tokens=1,2 delims=: " %%a in ('wmic logicaldisk get deviceid^,volumename') do (
set "_DRIVE.LETTERS.USED=!_DRIVE.LETTERS.USED!%%a,%%b@"
set "_DRIVE.LETTERS.FREE=!_DRIVE.LETTERS.FREE:%%a =!"
)
set _DRIVE.LETTERS.USED=%_DRIVE.LETTERS.USED:~0,-2%
set _DRIVE.LETTERS.USED=%_DRIVE.LETTERS.USED:,@=, @%
set _DRIVE.LETTERS
Rápido, flexível e eficiente. Embora um pouco complexo.
inspirado por Scott
for %i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do @%i: 2>nul && set/pz=%i <nul
também mostra a letra da unidade de CD. não precisa ser administrador.
mountvol
saída de amostra
\\?\Volume{11197e59-f977-11dd-afc6-111e6f6e6963}\
*** NO MOUNTING POINT ***
\\?\Volume{11197e59-f977-11dd-afc6-111e6f6e6963}\
D:\
\\?\Volume{11197e59-f977-11dd-afc6-111e6f6e6963}\
C:\
\\?\Volume{11197e59-f977-11dd-afc6-111e6f6e6963}\
E:\
Se alguém tiver a sorte de usar o Vista (Vista Ultimate SP2 b6002, no meu caso) e os trechos gwmi e wmic fornecidos aqui não funcionarem exatamente, aqui está o que eu fiz para fazê-lo funcionar.
Para gwmi , se você não receber saída, tente alterar o DriveType para 3. Se ainda estiver com problemas, remova a opção -filter completamente e analise a saída.
gwmi win32_LogicalDisk -filter DriveType=3
Para wmic , se você receber "Expressão GET inválida", tente colocar a expressão get entre aspas:
wmic logicaldisk get "caption,providername,drivetype,volumename"
Este site possui um conjunto de chamadas muito mais simples:
http://en.code-bude.net/2013/02/23/show-all-drives-in-command-prompt/
Mostrar unidades locais:
wmic logicdisk get deviceid, nome do volume, descrição
Se você deseja mostrar apenas unidades de um tipo específico, o comando wmic pode ser expandido ainda mais para incluir uma cláusula where.
wmic logicdisk onde drivetype = 2 obtém deviceid, nome do volume, descrição
Tipos
0 => Desconhecido
1 => Nenhum diretório raiz
2 => Disco removível
3 => Disco Local
4 => Unidade de Rede
5 => Disco compacto
6 => Disco RAM
@echo off
echo list volume > scriptdiskpart
diskpart/s scriptdiskpart
del scriptdiskpart
pause
for %a 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:) do @vol %a 2>&1 | find "drive"
Descobri que a abordagem diskpart relata unidades de DVD sem disco inserido e não relata cartões SD com volumes válidos
Embora tenha resposta suficiente, eu gostaria de adicionar uma quando você quiser usá-la no arquivo em lotes. Se você obtiver "Expressão GET inválida", poderá colocar um ^ antes do ',', como abaixo:
for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,providername^,drivetype^,volumename 2^>NUL`) do echo %%i %%l
^
faz aqui?
@ECHO OFF
IF NOT EXIST A: GOTO B
:A
VOL A:
:B
IF NOT EXIST B: GOTO C
VOL B:
:C
IF NOT EXIST C: GOTO D
VOL C:
:D
IF NOT EXIST D: GOTO E
VOL D:
:E
IF NOT EXIST E: GOTO F
VOL E:
:F
IF NOT EXIST F: GOTO G
VOL F:
:G
IF NOT EXIST G: GOTO H
VOL G:
:H
IF NOT EXIST H: GOTO I
VOL H:
:I
IF NOT EXIST I: GOTO J
VOL I:
:J
IF NOT EXIST J: GOTO K
VOL J:
:K
IF NOT EXIST K: GOTO L
VOL K:
:L
IF NOT EXIST L: GOTO M
VOL L:
:M
IF NOT EXIST M: GOTO N
VOL M:
:N
IF NOT EXIST N: GOTO O
VOL N:
:O
IF NOT EXIST O: GOTO P
VOL O:
:P
IF NOT EXIST P: GOTO Q
VOL P:
:Q
IF NOT EXIST Q: GOTO R
VOL Q:
:R
IF NOT EXIST R: GOTO S
VOL R:
:S
IF NOT EXIST S: GOTO T
VOL S:
:T
IF NOT EXIST T: GOTO U
VOL T:
:U
IF NOT EXIST U: GOTO V
VOL U:
:V
IF NOT EXIST V: GOTO W
VOL V:
:W
IF NOT EXIST w: GOTO X
VOL W:
:X
IF NOT EXIST X: GOTO Y
VOL X:
:Y
IF NOT EXIST Y: GOTO Z
VOL Y:
:Z
IF NOT EXIST Z: GOTO END
VOL Z:
:END