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, 내 경우)를 사용하기에 운이 좋으며 여기에 제공된 gwmiwmic 스 니펫이 정확하게 작동하지 않으면 여기에 내가 작동하도록 한 것입니다.

들어 을 원하면 더 출력을 수신하지 않는 경우, 여전히하는 데 문제가있는 경우 (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.