Windows 쉘 (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
내부 하드 드라이브 나 CDROM과 같은 로컬 디스크 드라이브는 표시되지 않습니다. 뭔가 빠졌습니까?
— Chris Magnuson

아니, 나는 그 질문을 오해했다. 나는 당신이 매핑 된 드라이브 만 원한다고 생각했습니다. 편집하겠습니다.
— EBGreen

2
wmic 솔루션은 모든 것을 제공해야합니다.
— EBGreen

wmic logicaldisk get caption, providername, drivetype을 인용하여 wmic logicaldisk get caption, providername, drivetype을 제거해야합니다. 그렇지 않으면 오류가 발생합니다. EBGreen 당신은 하루 동안 한 손으로 내 마음을 날려 버렸고, 몇 주 동안 다양한 서버 빌드를 스크립팅 했는데도 wmic를 본 적이 없으며 다른 작업으로 무엇을 할 수 있는지 매우 기대됩니다. 잘 했어!
— Chris Magnuson

1
wmic logicaldisk get caption, providername, drivetype, volumename 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 LETTER (s) : USED : "="DRIVE LETTER (s) : 무료 : "! TMP_FREE_DRIVE_LETTERS!"`
— John Gardeniers

이 파일을 배치 파일의 시작 부분에 넣어야합니다. setlocal enabledelayedexpansion
— 달마 레너 디

누락 된 줄을 포함하도록 답변을 편집했습니다. 지금 작동합니다. +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

CD 드라이브 문자도 표시합니다. 관리자 일 필요는 없습니다.


간단하고 작동
— 타일러 롱

"현재로서는 예상치 못한 일이었습니다."
— 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 스 니펫이 정확하게 작동하지 않으면 여기에 내가 작동하도록 한 것입니다.

들어 을 원하면 더 출력을 수신하지 않는 경우, 여전히하는 데 문제가있는 경우 (3)에 DriveType을 변경해보십시오 출력을 모두 필터 - 옵션을 제거하고 분석 할 수 있습니다.

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 logicaldisk는 장치 ID, 볼륨 이름, 설명을 얻습니다.


특정 유형의 드라이브 만 표시하려면 where 절을 포함하도록 wmic 명령을 추가로 확장 할 수 있습니다.

wmic logicaldisk 여기서 drivetype = 2는 deviceid, volumename, description을 얻습니다.

종류

0 => 알 수 없음

1 => 루트 디렉토리 없음

2 => 이동식 디스크

3 => 로컬 디스크

4 => 네트워크 드라이브

5 => 컴팩트 디스크

6 => RAM 디스크


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

나는 이것을 시도했지만 작동하지 않았다. 나는 / s 앞에 공백이 있어야한다고 생각하지만 그 변화에도 불구하고 작동하지 않았습니다. 위의 파일을 d.bat 파일에 넣고 diskpart 창이 깜박이지만 사라지고이를 실행하는 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"

diskpart 접근법이 디스크가 삽입되지 않은 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

다소 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

쉘과 같은 Unix의 \와 비슷한 cmd.exe의 이스케이프 문자입니다.
— 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.