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


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

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

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.


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.


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:\

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"

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


2
@echo off
echo list volume > scriptdiskpart
diskpart/s scriptdiskpart
del scriptdiskpart
pause

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


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

0

Agak kotor, tetapi bekerja dari file batch:

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

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

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.