Bagaimana cara mendapatkan daftar huruf drive pada sistem melalui shell windows (bat, cmd)?

25

Bagaimana cara saya mendapatkan daftar huruf drive dan label terkait pada sistem windows melalui file bat?

Chris Magnuson
sumber

Jawaban:

36

Ini akan mendapatkan sebagian besar dari itu:

Net Use

Jika Anda memiliki drive yang dipetakan melalui subst, Anda juga perlu mendapatkannya:

Subst

Untuk kelengkapan, Anda akan melakukannya seperti ini di Powershell (jika Anda berada di windows 7 atau telah menginstalnya):

gwmi win32_LogicalDisk -filter DriveType=4

Anda juga dapat melakukannya dari prompt perintah atau file batch menggunakan WMI seperti ini:

wmic logicaldisk get caption,providername,drivetype,volumename
EBGreen
sumber
1
Ini tidak mencantumkan drive disk lokal seperti hard drive internal atau cdrom. Apakah saya melewatkan sesuatu?
Chris Magnuson
Tidak, saya salah paham pertanyaannya. Saya pikir Anda hanya ingin memetakan drive. Saya akan mengedit.
EBGreen
2
Solusi wmic harus memberi Anda segalanya.
EBGreen
Anda perlu menghapus tanda kutip dari wmic logicaldisk untuk mendapatkan "caption, providername, drivetype" sehingga wmic logicaldisk mendapatkan caption, providername, drivetype selain itu ada kesalahan. EBGreen Anda sendirian meniup pikiran saya untuk hari ini, saya belum pernah melihat wmic meskipun saya telah menulis berbagai server selama berminggu-minggu dan saya sangat senang melihat apa lagi yang bisa saya lakukan dengan itu. Kerja bagus!
Chris Magnuson
1
wmic logicaldisk mendapatkan caption, providername, drivetype, volumename, VolumeName adalah apa yang saya lewatkan, jika Anda memperbarui Anda dengan itu saya akan menerimanya sebagai jawabannya. Terima kasih
Chris Magnuson
15

Untuk menggunakan diskpart, tidak perlu membuat file perantara. Mencoba:

echo list volume | diskpart
gnoise
sumber
2
Ini adalah jawaban terbaik dan mengembalikan info paling banyak tentang drive yang dipasang dalam format yang indah.
ekerner
tetapi membutuhkan hak admin
LogicDaemon
9
@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

Cepat, fleksibel, dan efisien. Meski sedikit rumit.

Dharma Leonardi
sumber
Saya tidak tahu apa versi Windows ini bekerja tetapi saya hanya mengujinya pada mesin Win 7 dan XP saya dan mendapatkan output berikut dari keduanya: `DRIVE LETTER (s): USED:" = "DRIVE LETTER (s): GRATIS: "! TMP_FREE_DRIVE_LETTERS!" `
John Gardeniers
Maaf, Anda harus meletakkan ini di awal file batch. setlocal enabledelayedexpansion
Dharma Leonardi
Saya telah mengedit jawaban Anda untuk memasukkan baris yang hilang. Ini berfungsi sekarang. +1
John Gardeniers
7

terinspirasi oleh 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

juga menunjukkan huruf drive CD. tidak perlu menjadi admin.

Yuning
sumber
sederhana dan berhasil
Tyler Long
"Aku tidak terduga pada saat ini."
Berit Larsen
@BeritLarsen Anda perlu menggandakan simbol% ​​jika menjalankannya sebagai file batch daripada pada baris perintah.
TessellatingHeckler
5
mountvol

output sampel

\\?\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:\
Jader Dias
sumber
4

Jika ada orang yang cukup beruntung menggunakan Vista (Vista Ultimate SP2 b6002, dalam kasus saya) dan potongan gwmi dan wmic yang diberikan di sini tidak bekerja dengan tepat, inilah yang saya lakukan untuk membuatnya bekerja.

Untuk gwmi , jika Anda tidak menerima output, coba ubah DriveType ke 3. Jika masih mengalami masalah, hapus opsi -filter sekaligus dan analisis output.

gwmi win32_LogicalDisk -filter DriveType=3

Untuk wmic , jika Anda menerima "Ekspresi GET Tidak Valid", cobalah menempatkan ekspresi get dalam tanda kutip:

wmic logicaldisk get "caption,providername,drivetype,volumename"
tdowg1
sumber
2

Situs ini memiliki serangkaian panggilan yang lebih sederhana:

http://en.code-bude.net/2013/02/23/show-all-drives-in-command-prompt/

Tampilkan drive lokal:

wmic logicaldisk dapatkan deviceid, volumename, description


Jika Anda hanya ingin menunjukkan drive dari jenis tertentu, perintah wmic dapat diperluas lebih lanjut untuk menyertakan klausa where.

wmic logicaldisk di mana drivetype = 2 dapatkan deviceid, volumename, description

Jenis

0 => Tidak Dikenal

1 => Tidak Ada Direktori Root

2 => Removable Disk

3 => Disk Lokal

4 => Drive Jaringan

5 => Compact Disc

6 => RAM Disk

David Tr
sumber
2
@echo off
echo list volume > scriptdiskpart
diskpart/s scriptdiskpart
del scriptdiskpart
pause
5d4gd
sumber
Saya mencoba yang ini dan tidak berhasil. Saya pikir perlu ada ruang di depan / s tetapi bahkan dengan perubahan itu tidak berhasil. Saya meletakkan di atas dalam file, d.bat dan saya melihat jendela diskpart menyala tapi kemudian menghilang dan cmd shell tempat saya menjalankan ini kemudian menunjukkan jeda berjalan.
slm
1
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"

Saya menemukan pendekatan pendekatan diskpart melaporkan drive DVD tanpa disk dimasukkan, dan tidak melaporkan kartu SD dengan volume drive yang valid

Nick
sumber
tidak bekerja untuk windows xp
Tyler Long
1
for %%p 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 if exist %%p:\nul your_command_and_parameters_here
pai
sumber
0

Agak kotor, tetapi bekerja dari file batch:

echo LIST VOLUME > temp.txt && diskpart /s temp.txt && del /q temp.txt
Perhubungan
sumber
0

Meskipun memiliki jawaban yang cukup, saya ingin menambahkannya ketika Anda ingin menggunakannya dalam file batch. Jika Anda mendapatkan "Ekspresi GET Tidak Valid", Anda dapat meletakkan tanda ^ di depan tanda ',', seperti di bawah ini:

for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,providername^,drivetype^,volumename 2^>NUL`) do echo %%i %%l
Mingjiang Shi
sumber
Apa yang ^dilakukan di sini?
vonbrand
Ini adalah karakter pelarian cmd.exe, mirip dengan \ di shell mirip Unix.
gimpf
-1
@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
Scott
sumber
Um, wow. Jadi, jika Anda dapat menyaringnya menjadi sesuatu yang sebenarnya hanya akan mengeluarkan huruf dan label drive yang ada pada sistem yang akan lebih dekat dengan jawaban untuk pertanyaan meskipun ini adalah gerakan paling tidak ke arah yang benar.
Chris Magnuson
Saya mendapatkan suara untuk memberikan solusi yang memenuhi kriteria? Wow ...
Scott
4
Yah, untuk satu hal, ini menghasilkan kesalahan untuk drive yang ada tetapi tidak mengandung media, seperti drive CD / DVD.
Dijeda sampai pemberitahuan lebih lanjut.
+1 untuk gagasan
Tyler Long
semua memuji kode Cina!
LogicDaemon