วิธีรับรายการตัวอักษรของไดรฟ์บนระบบผ่าน windows shell (bat, cmd)


คำตอบ:


36

สิ่งนี้จะได้รับประโยชน์สูงสุด:

Net Use

หากคุณมีไดรฟ์ใด ๆ ที่แมปผ่าน subst คุณจะต้องขอรับไดรฟ์เหล่านั้นด้วย:

Subst

เพื่อความสมบูรณ์คุณจะต้องทำเช่นนี้ใน Powershell (หากคุณใช้ Windows 7 หรือติดตั้งไว้):

gwmi win32_LogicalDisk -filter DriveType=4

คุณยังสามารถทำได้จากพรอมต์คำสั่งหรือแบตช์ไฟล์โดยใช้ WMI ดังนี้:

wmic logicaldisk get caption,providername,drivetype,volumename

1
นี่ไม่ใช่รายการดิสก์ไดรฟ์ภายในเช่นฮาร์ดไดรฟ์ภายในหรือ cdroms ฉันพลาดอะไรไปรึเปล่า?
Chris Magnuson

ไม่ฉันเข้าใจผิดคำถาม ฉันคิดว่าคุณต้องการไดรฟ์ที่แมปเท่านั้น ฉันจะแก้ไข
EBGreen

2
วิธีแก้ปัญหา wmic ควรให้ทุกสิ่งแก่คุณ
EBGreen

คุณจำเป็นต้องลบเครื่องหมายคำพูดจาก wmic logicaldisk รับ "คำบรรยายภาพ, ชื่อผู้ให้บริการ, drivetype" เพื่อให้เป็นคำอธิบายภาพ Wmic ตรรกะได้รับชื่อผู้ให้บริการ, ชื่อผู้ขับขี่และประเภทอื่น ๆ มันผิดพลาด EBGreen คุณมีความคิดอย่างถี่ถ้วนในวันนี้ฉันไม่เคยเห็น wmic แม้ว่าฉันจะใช้สคริปต์เซิร์ฟเวอร์หลายต่อหลายสัปดาห์ แต่ฉันก็ตื่นเต้นมากที่จะเห็นว่าฉันสามารถทำอะไรกับมันได้บ้าง เยี่ยมมาก!
Chris Magnuson

1
wmic logicaldisk รับคำบรรยายภาพชื่อผู้ใช้ไดรฟ์ประเภทตามชื่อ VolumeName คือสิ่งที่ฉันพลาดหากคุณอัปเดตข้อมูลของคุณโดยที่ฉันจะยอมรับว่าเป็นคำตอบ ขอบคุณ
Chris Magnuson

15

ในการใช้ diskpart ไม่จำเป็นต้องสร้างไฟล์ระดับกลาง ลอง:

echo list volume | diskpart

2
นี่คือคำตอบที่ดีที่สุดและส่งคืนข้อมูลมากที่สุดเกี่ยวกับไดรฟ์ที่ติดตั้งในรูปแบบที่สวยงาม
ekerner

แต่ต้องใช้สิทธิ์ของผู้ดูแลระบบ
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

รวดเร็วยืดหยุ่นและมีประสิทธิภาพ แม้ว่าจะซับซ้อนเล็กน้อย


ฉันไม่ทราบว่า Windows รุ่นใดใช้งานได้ แต่ฉันเพิ่งทดสอบบนเครื่อง Win 7 และ XP ของฉันและได้ผลลัพธ์ต่อไปนี้จากทั้งสอง: `ตัวอักษร DRIVE: USED:" = "DRIVE LETTER: ฟรี: "! TMP_FREE_DRIVE_LETTERS!" `
John Gardeniers

ขออภัยคุณต้องวางสิ่งนี้ไว้ในตำแหน่งเริ่มต้นของแบตช์ไฟล์ เปิดใช้งานการตั้งค่าล่าช้าส่งคำสั่ง
Dharma Leonardi

ฉันได้แก้ไขคำตอบของคุณเพื่อรวมบรรทัดที่หายไป มันใช้งานได้แล้ว +1
John Gardeniers

7

แรงบันดาลใจจากสกอตต์

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

ยังแสดงตัวอักษรไดรฟ์ซีดี ไม่จำเป็นต้องเป็นผู้ดูแลระบบ


เรียบง่ายและผลงาน
Tyler Long

"ฉันคาดไม่ถึงในเวลานี้"
Berit Larsen

@BeritLarsen คุณต้องเพิ่มสัญลักษณ์% ขึ้นสองเท่าหากใช้เป็นไฟล์แบตช์แทนที่จะอยู่ในบรรทัดคำสั่ง
TessellatingHeckler

5
mountvol

ตัวอย่างผลลัพธ์

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

หากใครโชคดีพอที่จะใช้ Vista (Vista Ultimate SP2 b6002 ในกรณีของฉัน) และgwmiตัวอย่างข้อมูลและwmicที่นี่ไม่ทำงานอย่างถูกต้องนี่คือสิ่งที่ฉันทำเพื่อให้ทำงานได้

สำหรับgwmiหากคุณไม่ได้รับผลลัพธ์ให้ลองเปลี่ยน DriveType เป็น 3 หากยังมีปัญหาอยู่ให้ลบตัวเลือก -filter ออกพร้อมกันแล้ววิเคราะห์ผลลัพธ์

gwmi win32_LogicalDisk -filter DriveType=3

สำหรับwmicหากคุณได้รับ "Express GET Expression" ไม่ถูกต้องให้ลองใส่get expression ในเครื่องหมายคำพูด:

wmic logicaldisk get "caption,providername,drivetype,volumename"

2

ไซต์นี้มีชุดการโทรที่เรียบง่ายกว่ามาก:

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

แสดงไดรฟ์ในเครื่อง:

wmic logicaldisk รับ deviceid, volumename, description


หากคุณต้องการแสดงเฉพาะไดรฟ์ประเภทใดประเภทหนึ่งคำสั่ง wmic สามารถขยายเพิ่มเติมเพื่อรวมส่วนคำสั่ง where

wmic logicaldisk โดยที่ drivetype = 2 รับ deviceid, volumename, description

ประเภท

0 => ไม่ทราบ

1 => ไม่มีไดเรกทอรีรูต

2 => ดิสก์ที่ถอดออกได้

3 => ดิสก์ภายในเครื่อง

4 => ไดรฟ์เครือข่าย

5 => คอมแพคดิสก์

6 => RAM Disk


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

ฉันลองอันนี้แล้วก็ใช้ไม่ได้ ฉันคิดว่าจะต้องมีพื้นที่ด้านหน้า / s แต่ถึงแม้จะมีการเปลี่ยนแปลง แต่ก็ไม่ได้ผล ฉันใส่ข้างบนลงในไฟล์ d.bat และฉันเห็นว่า diskpart window กระพริบ แต่ก็หายไปและ cmd shell ที่ฉันใช้งานอยู่จะแสดงการหยุดทำงานชั่วคราว
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"

ฉันพบวิธีการ diskpart รายงานไดรฟ์ดีวีดีโดยไม่ใส่ดิสก์และไม่รายงานการ์ด SD ที่มีไดรฟ์ข้อมูลที่ถูกต้อง


ใช้งานไม่ได้กับ windows xp
Tyler Long


0

ค่อนข้าง kludgy แต่ทำงานจากแบตช์ไฟล์:

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

0

แม้ว่าจะมีคำตอบเพียงพอ แต่ฉันต้องการเพิ่มเมื่อคุณต้องการใช้ในแบทช์ไฟล์ หากคุณได้รับ "การแสดงออกของ GET ไม่ถูกต้อง" คุณสามารถใส่ ^ ก่อนหน้า ',' เช่นด้านล่าง:

for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,providername^,drivetype^,volumename 2^>NUL`) do echo %%i %%l

สิ่งนี้^ทำที่นี่
vonbrand

มันเป็นตัวละครในการหลบหนีของ cmd.exe คล้ายกับ \ in 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

อืมว้าว ดังนั้นหากคุณสามารถกลั่นสิ่งนั้นลงในบางสิ่งที่จริง ๆ แล้วเพิ่งเอาท์พุทตัวอักษรไดรฟ์และฉลากที่มีอยู่ในระบบที่จะใกล้กับคำตอบของคำถามแม้ว่านี่จะเป็นการเคลื่อนไหวน้อยที่สุดในทิศทางที่ถูกต้อง
Chris Magnuson

ฉันได้รับการลงคะแนนให้แก้ปัญหาที่ตรงกับเกณฑ์หรือไม่ ว้าว ...
สกอตต์

4
มันมีข้อผิดพลาดเกิดขึ้นกับไดรฟ์ที่มีอยู่ แต่ไม่มีสื่อเช่นไดรฟ์ CD / DVD
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

+1 สำหรับแนวคิด
Tyler Long

ทุกคนโห่ร้องรหัสจีน!
LogicDaemon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.