Як отримати список букв диска в системі через оболонку Windows (bat, cmd)?


Відповіді:


36

Це отримає більшу частину цього:

Net Use

Якщо у вас є будь-які накопичувачі, відображені через субст, вам також знадобиться отримати такі:

Subst

Для повноти ви зробили б це так у Powershell (якщо у вас є Windows 7 або встановили його):

gwmi win32_LogicalDisk -filter DriveType=4

Ви також можете зробити це з командного рядка або пакетного файлу, використовуючи WMI таким чином:

wmic logicaldisk get caption,providername,drivetype,volumename

1
У цьому списку не відображаються локальні дискові диски, як будь-які внутрішні жорсткі диски чи компакт-диски. Я щось пропускаю?
Кріс Магнусон

Ні, я неправильно зрозумів питання. Я думав, що ви хочете лише зіставити диски. Я відредагую.
EBGreen

2
Розчин wmic повинен дати вам усе.
EBGreen

Вам потрібно видалити лапки з wmic logicdisk отримати "підпис, ім'я постачальника, тип", так що це wmic logicdisk отримати заголовки, ім'я постачальника, тип води, інший мудрий він видає помилку. EBGreen у вас на долоні підірвався мій розум протягом дня, я ніколи не бачив wmic, хоча я вже кілька тижнів розробляв різні версії серверів, і я дуже радий бачити, що ще я можу зробити з цим. Чудова робота!
Кріс Магнусон

1
wmic logicdisk отримати підпис, ім'я постачальника, тип води, тома, ім'я VolumeName було те, чого мені не вистачало, якщо ви оновите ваше, я прийму це як відповідь. Спасибі
Кріс Магнусон

15

Щоб використовувати diskpart, не потрібно створювати проміжний файл. Спробуйте:

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

Швидкий, гнучкий і ефективний. Хоча трохи складний.


Я не знаю, на яких версіях Windows працює ця робота, але я лише перевірив її на своїх машинах Win 7 та XP і отримав наступний вихід з обох: `DRIVE LETTER (s): USED:" = "DRIVE LETTER (s): БЕЗКОШТОВНО: "! TMP_FREE_DRIVE_LETTERS!" `
John Gardeniers

Вибачте, вам потрібно покласти це на початок пакетного файлу. setlocal enabledelayedexpansion
Дхарма Леонарді

Я відредагував вашу відповідь, щоб включити пропущений рядок. Це працює і зараз. +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

також відображається лист диска CD. не потрібно бути адміністратором.


простий і працює
Тайлер Лонг

"Я в цей час був несподіваним."
Беріт Ларсен

@BeritLarsen потрібно подвоїти% символів, якщо він працює як пакетний файл, а не в командному рядку.
TesselilingHeckler

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 , якщо ви отримуєте "Недійсне вираження GET", спробуйте помістити вираз get у лапки:

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

2

На цьому сайті є набагато простіший набір дзвінків:

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

Показати локальні диски:

wmic logicdisk отримати deviceid, ім'я тома, опис


Якщо ви хочете показати лише диски певного типу, команду wmic можна додатково розширити, щоб включити пункт де.

wmic logicdisk, де drivetype = 2 отримує deviceid, ім'я тома, опис

Типи

0 => Невідомо

1 => Немає кореневого каталогу

2 => Знімний диск

3 => Локальний диск

4 => Мережевий диск

5 => Компактний диск

6 => диск оперативної пам’яті


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

Я спробував цю, і це не вийшло. Я думаю, що перед / s має бути пробіл, але навіть із цією зміною це не вийшло. Я поміщаю вище у файл, d.bat, і я бачу, що вікно дискової частини спалахує, але потім зникає, і оболонка cmd, де я це запускаю, показує, що пауза працює.
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"

Я виявив, що звіт про підхід дискових дисків повідомляє про DVD-накопичувачі, не вставлені диски, і не повідомляє SD-карти з дійсними обсягами накопичувачів


не працює для 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

Дещо незрозумілий, але працює з пакетного файлу:

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, схожий на \ в 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

Гм, вау. Тож якщо ви зможете перенаправити це на щось, що насправді просто виводить букви накопичувачів та міток, які існують у системі, що було б ближче до відповіді на питання, хоча це найменший рух у правильному напрямку.
Кріс Магнусон

Я отримую голоси за надання рішення, яке відповідає критеріям? Нічого ...
Скотт,

4
З одного боку, вона створює помилки для накопичувачів, які існують, але не містять носіїв інформації, наприклад, пристрій CD / DVD.
Призупинено до подальшого повідомлення.

+1 для ідеї
Тайлер Лонг

всі вітаємо китайський код!
LogicDaemon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.