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


回答:


36

これで大部分が得られます:

Net Use

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

Subst

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

gwmi win32_LogicalDisk -filter DriveType=4

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

wmic logicaldisk get caption,providername,drivetype,volumename

1
これは、内部ハードドライブやCD-ROMのようなローカルディスクドライブをリストしません。何か不足していますか?
クリスマグナソン

いいえ、質問を誤解しました。マップされたドライブだけが必要だと思いました。編集します。
EBGreen

2
wmicソリューションはすべてを提供します。
EBGreen 2009

wmic logicaldisk get "caption、providername、drivetype"から引用符を削除して、wmic logicaldisk get caption、providername、drivetypeでなければエラーをスローする必要があります。EBGreenあなたはその日に心を一気に吹き飛ばしました。数週間にわたってさまざまなサーバービルドのスクリプトを作成してきましたが、wmicは見たことがありません。よくやった!
クリスマグナソン

1
wmic logicaldisk get caption、providername、drivetype、volumename VolumeNameは私が欠けていたものでした。あなたがそれを更新するなら、それを答えとして受け入れます。ありがとう
クリス・マグナソン

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!」 `
ジョン

申し訳ありませんが、これをバッチファイルの先頭に配置する必要があります。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をコマンドラインではなくバッチファイルとして実行する場合は、%記号を2倍にする必要があります。
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スニペットが正確に機能しない場合、それを機能させるために私がしたことはここにあります。

gwmiあなたは何も出力を受けていない場合は、まだ問題がある場合は3にDRIVETYPEを変更してみてください、完全-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 logicaldisk get deviceid、volumename、description


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

wmic logicaldisk where drivetype = 2 get 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では動作しません
タイラーロング

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
まあ、1つには、CD / DVDドライブなど、存在するがメディアを含まないドライブに対してエラーを生成します。
追って通知があるまで一時停止します。

アイデアの+1
タイラーロング

すべて中国のコードを称えます!
LogicDaemon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.