web-dev-qa-db-ja.com

USBドライブストレージを検出するためのループ

これは、USBドライブストレージを検出するための私のループです。

setlocal enabledelayedexpansion
REM get removable loaded drives:
for /f %%a in ('"wmic logicaldisk where (drivetype=2 and size is not null) get caption,size 2>nul|find ":""') do set usb=!usb! %%a

ほとんどのUSBドライブストレージを検出します。ただし、検出されないものもあります(16GBを超えるfat32または外付けドライブNTFS500mb 1 tbなど)

問題は「DRIVETYPE」に関係していると思います

Value   Meaning
  0     Unknown
  1     No root directory
  2     Removable disk
  3     Local disk
  4     Network drive
  5     Compact disk
  6     RAM disk

例:fat32 usbデバイス32GBストレージ、固定ディスク(リムーバブルディスクではない)としてリストします。

wmic logicaldisk get description,name

SO:7/8/8.1/10に勝つ

ループですべてのUSBストレージデバイスを検出するにはどうすればよいですか?ありがとう

3
user584517

Setlocalを設定しているため、コードが機能しないため、バッチを存続させる変数はありません。一方、デリムやトークンは使用しません。デフォルトでは、delims=はスペースで、tokens=1です。最後の行としてset usbを入力すると、Usb= E:(先頭にスペースを含む)のみが表示されます。可能なドライブはそれほど多くないので、バッチでフィルタリングを行い、より単純なwmic logicaldisk list briefを使用します。

どのトークンを使用するかはあなた次第です。

@Echo off
setlocal enabledelayedexpansion
Set "USB="
REM get removable loaded drives:
for /f "tokens=1-5" %%a in (
 'wmic logicaldisk list brief'
) do if %%b Equ 2 if %%d gtr 0 Set USB=!USB! %%a
Echo:Usb removable drives:%USB%
EndLocal&Set USB=%USB:~1%&Goto :Eof

[〜#〜] edit [〜#〜]収集されたUSBドライブを表示するためのエコーを追加しました。

> Get-UsbDrives.cmd
Usb removable drives:  E:

HTH

2
LotPings