alexii пишет:Что для таких псевдодисков говорит
Это малоинформативно. Вот пример:
wmic.exe LogicalDisk get Caption, Description, DriveType, MediaType, Size, VolumeName
Caption Description DriveType MediaType Size VolumeName
...
D: Removable Disk 2 31092375552 BACKUP
E: Removable Disk 2 3754930176 Digma r63S
G: Removable Disk 2
...
Здесь я добавил в вывод еще одно поле VolumeName. Убрал из вывода фиксированные диски и subst-диски (во всех случаях они возвращают Description=Local Fixed Disk, DriveType=3, MediaType=12).
D - это флешка, вставлена постоянно
E - внутренее хранилище эл. книжки
G - пустой слот в ней же, флешки там нет.
Видно, что DriveType отображается, MediaType - пусто во всех случаях. VolumeName - видимо не является надежным индикатором. Видимо, только Size (и другие поля из этого семейства данных) самые надежные индикаторы доступности диска.
Следующий тест:
for /f "skip=1" %d in ( 'wmic LogicalDisk GET Caption' ) do @if exist %~d\. echo:%d - OK
C: - OK
D: - OK
E: - OK
U: - OK
Z: - OK
В примере выше проверка вызывает обращение к несуществующему диску и выводит диалоговое окно, при этом работа скрипта приостанавливается (в прикрепленной картинке пример работы данной команды):
---------------------------
cmd.exe - No Disk
---------------------------
There is no disk in the drive. Please insert a disk into drive \Device\Harddisk4\DR4.
---------------------------
Cancel Try Again Continue
---------------------------
Видимо проверка на непустое значение размера диска - наиболее надежно (код из первого сообщения):
for /f "skip=1 tokens=1,2" %%d in ( 'wmic LogicalDisk GET Caption^,Size' ) do for %%s in ( %%~e ) do if exist "%%~d\somefile" (
rem диск существует (размер ненулевой)
rem на диске есть некоторый флаговый файл (в примере somefile)
rem можно что-то сделать с этим диском
)
Правда, приходится второй цикл организовывать, потому что вывод WMIC содержит лишние символы (нестандартный конец строки: CR CR LF) и в параметр %e попадает первый символ CR. Здесь возможны два варианта: либо второй цикл, либо еще одна промежуточная переменная. Я выбрал цикл (здесь возможны варианты исполнения).
Post's attachments1.jpg 79.3 kb, file has never been downloaded.
You don't have the permssions to download the attachments of this post.
( 2 * b ) || ! ( 2 * b )