विंडोज शेल (बैट, सेमी) के माध्यम से सिस्टम पर ड्राइव अक्षरों की सूची कैसे प्राप्त करें?


जवाबों:


36

यह इसे सबसे अधिक मिलेगा:

Net Use

यदि आपके पास विकल्प के माध्यम से मैप की गई कोई भी ड्राइव है, तो आपको उन्हें प्राप्त करने की आवश्यकता होगी:

Subst

पूर्णता के लिए, आप इसे पॉवरशेल में ऐसा करेंगे (यदि आप विंडोज 7 पर हैं या इसे स्थापित कर चुके हैं):

gwmi win32_LogicalDisk -filter DriveType=4

आप इसे कमांड प्रॉम्प्ट या इस तरह से WMI का उपयोग करके एक बैच फ़ाइल से भी कर सकते हैं:

wmic logicaldisk get caption,providername,drivetype,volumename

1
यह किसी भी आंतरिक हार्ड ड्राइव या cdroms की तरह स्थानीय डिस्क ड्राइव को सूचीबद्ध नहीं करता है। क्या मैं कुछ भूल रहा हूँ?
क्रिस मैगनसन

नहीं, मैंने सवाल गलत समझा। मैंने सोचा था कि आप केवल मैप किए गए ड्राइव चाहते थे। मैं संपादित करूंगा।
21

2
वैमिक समाधान आपको सब कुछ देना चाहिए।
21

आपको वक्ती लॉजिस्टिक से उद्धरण निकालने की आवश्यकता है "कैप्शन, प्रोबनेम, ड्राइवटाइप" प्राप्त करें ताकि यह विकी लॉजिकलडिस्क हो कैप्शन, प्रोबनेम, ड्राइवटाइप अन्य बुद्धिमान इसे एक त्रुटि फेंकता है। EBGreen आपने दिन भर के लिए अपना दिमाग उड़ा लिया है, मैंने कभी भी विकी को नहीं देखा है जबकि मैं कई हफ्तों से विभिन्न सर्वरों का निर्माण कर रहा हूं और मैं यह देखने के लिए बेहद उत्साहित हूं कि मैं इसके साथ और क्या कर सकता हूं। अच्छा काम!
क्रिस मैग्नसन

1
वर्म लॉजिकलडिस्क को कैप्शन, प्रोफ़ेनाम, ड्राइवटाइप, वॉल्यूमनमेम मिलता है वॉल्यूमनैम वही था जो मुझे याद आ रहा था, अगर आप इसे अपडेट करते हैं तो मैं इसे उत्तर के रूप में स्वीकार करूंगा। धन्यवाद
क्रिस मैग्नसन

15

डिस्कपार्ट का उपयोग करने के लिए, एक मध्यवर्ती फ़ाइल बनाने की आवश्यकता नहीं है। प्रयत्न:

echo list volume | diskpart

2
यह सबसे अच्छा जवाब है और एक सुंदर प्रारूप में घुड़सवार ड्राइव के बारे में सबसे अधिक जानकारी देता है।
एकरनार

लेकिन इसके लिए व्यवस्थापक अधिकारों की आवश्यकता है
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

तेज, लचीला और कुशल। हालांकि थोड़ा जटिल है।


मुझे नहीं पता कि विंडोज के कौन से संस्करण इस पर काम करते हैं, लेकिन मैंने अभी इसे अपने विन 7 और एक्सपी मशीनों पर परीक्षण किया है और दोनों से निम्न आउटपुट मिला है: `DRIVE LETTER (s): USED:" = "DRIVE LETTER (s): मुफ़्त: "! TMP_FREE_DRIVE_LETTERS!" `
जॉन गार्डनियर्स

क्षमा करें, आपको इसे बैच फ़ाइल की शुरुआत में रखना होगा। सेट्लोकल इनेबेलफेड एक्सपेंसेशन
धर्म लियोनार्डी

मैंने लापता लाइन को शामिल करने के लिए आपके उत्तर को संपादित कर दिया है। यह अब काम करता है। +1
जॉन गार्डनियर्स

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

सीडी ड्राइव पत्र भी दिखाता है। व्यवस्थापक होने की कोई आवश्यकता नहीं है।


सरल और काम करता है
टायलर लांग

"मैं इस समय अप्रत्याशित था।"
बेरीट लार्सन सेप

@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

अगर कोई विस्टा (विस्टा अल्टिमेट SP2 b6002, मेरे मामले में) का उपयोग करने के लिए पर्याप्त भाग्यशाली है और यहां दिए गए gwmi और wmic स्निपेट्स बिल्कुल काम नहीं करते हैं, तो यहां वही है जो मैंने इसे काम करने के लिए किया था।

के लिए gwmi , अगर आप कोई उत्पादन प्राप्त करते हैं, 3. करने के लिए DriveType बदलते यदि समस्या अभी भी होने की कोशिश -Filter विकल्प पूरी तरह निकाल दें और आउटपुट का विश्लेषण।

gwmi win32_LogicalDisk -filter DriveType=3

के लिए wmic , यदि आप "अवैध प्राप्त अभिव्यक्ति" प्राप्त करते हैं, तो डाल कोशिश प्राप्त उद्धरण में अभिव्यक्ति:

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

2

इस साइट पर कॉल का बहुत सरल सेट है:

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

स्थानीय ड्राइव दिखाएं:

विकर्म लॉजिकडिस्क को डिवाइसिड, वॉल्यूनेम, विवरण मिलता है


यदि आप किसी विशेष प्रकार की केवल ड्राइव दिखाना चाहते हैं, तो वर्म कमांड को आगे बढ़ाया जा सकता है जिसमें एक क्लॉज शामिल है।

विकर्म लॉजिकडिस्क जहां ड्राइवटाइप = 2 में डिवाइसिड, वॉल्यूनेम, विवरण मिलता है

प्रकार

0 => अज्ञात

1 => कोई रूट निर्देशिका नहीं

2 => हटाने योग्य डिस्क

3 => स्थानीय डिस्क

4 => नेटवर्क ड्राइव

5 => कॉम्पैक्ट डिस्क

6 => रैम डिस्क


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

मैंने यह एक कोशिश की और यह काम नहीं किया। मुझे लगता है कि वहाँ / s के सामने एक स्थान होना चाहिए, लेकिन उस बदलाव के साथ भी यह काम नहीं किया। मैं ऊपर एक फ़ाइल में डाल दिया, d.bat और मैं डिस्कपार्ट विंडो को फ्लैश करते हुए देखता हूं, लेकिन फिर गायब हो जाता हूं और cmd शेल जहां मैं इसे चला रहा हूं, तब पॉज को रनिंग दिखाता है।
स्लम

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"

मैंने पाया कि डिस्कपार्ट अप्रोच डीवीडी ड्राइव को बिना किसी डिस्क के डालती है, और मान्य ड्राइव वॉल्यूम के साथ एसडी कार्ड की रिपोर्ट नहीं करती है


विंडोज़ के लिए काम नहीं करता है xp
टायलर लॉन्ग

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

कुछ हद तक गुदगुदी, लेकिन एक बैच फ़ाइल से काम करता है:

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

यह ^यहाँ क्या करता है?
वॉनब्रांड

यह cmd.exe का एस्केप कैरेक्टर है, जो यूनिक्स की तरह गोले की तरह है।
जिम्पफ

-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

उम, वाह। इसलिए यदि आप उस चीज में गड़बड़ी कर सकते हैं जो वास्तव में ड्राइव अक्षर और लेबल को आउटपुट करेगी जो सिस्टम पर मौजूद है जो सवाल के जवाब के करीब होगा, हालांकि यह सही दिशा में कम से कम आंदोलन है।
क्रिस मैगनसन

मैं एक समाधान प्रदान करने के लिए नीचे मतदान कर रहा हूं जो मानदंडों को पूरा करता है? वाह ...
स्कॉट

4
खैर, एक बात के लिए, यह उन ड्राइव के लिए त्रुटियां पैदा करता है जो मौजूद हैं, लेकिन कोई मीडिया नहीं है, जैसे कि सीडी / डीवीडी ड्राइव।
अगली सूचना तक रोक दिया गया।

विचार के लिए +1
टायलर लॉन्ग

सभी चीनी कोड जय हो!
लॉजिकडेमॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.