web-dev-qa-db-ja.com

Windowsシェル(bat、cmd)を使用してシステムのドライブ文字のリストを取得する方法

ドライブ文字とそれに関連付けられたラベルのリストをbatファイルを通じてWindowsシステムで取得するにはどうすればよいですか?

26
Chris Magnuson

これはそのほとんどを取得します:

Net Use

Substを介してマップされたドライブがある場合は、それらも取得する必要があります。

Subst

完全を期すには、Powershellで次のようにします(Windows 7を使用しているか、インストールしている場合)。

gwmi win32_LogicalDisk -filter DriveType=4

次のように、WMIを使用してコマンドプロンプトまたはバッチファイルから実行することもできます。

wmic logicaldisk get caption,providername,drivetype,volumename
37
EBGreen

Diskpartを使用するために、中間ファイルを作成する必要はありません。試してください:

echo list volume | diskpart
15
gnoise
@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

高速、柔軟、効率的です。少し複雑ですが。

10
Dharma Leonardi

スコットに触発されて

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ドライブ文字も表示されます。管理者である必要はありません。

7
Yuning
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:\
5
Jader Dias

だれかがラッキー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"
4
tdowg1
@echo off
echo list volume > scriptdiskpart
diskpart/s scriptdiskpart
del scriptdiskpart
pause
2
5d4gd

このサイトには、はるかに単純な一連の呼び出しがあります。

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

ローカルドライブを表示:

wmic logicaldisk get deviceid、volumename、description


特定のタイプのドライブのみを表示したい場合は、wmicコマンドをさらに拡張してwhere節を含めることができます。

wmic論理ディスク、ここでdrivetype = 2はデバイスID、ボリューム名、説明を取得します

タイプ

0 =>不明

1 =>ルートディレクトリなし

2 =>リムーバブルディスク

3 =>ローカルディスク

4 =>ネットワークドライブ

5 =>コンパクトディスク

6 => RAMディスク

2
David Tr
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
1
pbies
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カードを報告しないことがわかりました

1
Nick

やや厄介ですが、バッチファイルから機能します:

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

答えは十分ですが、バッチファイルで使いたいときに追加したいと思います。 「無効なGET式」を受け取った場合、以下のように、「、」の前に^を置くことができます。

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