<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; CMD/BAT/WMIC: проверка доступности определенного диска]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14334&amp;type=atom" />
	<updated>2018-11-24T15:23:03Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=14334</id>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT/WMIC: проверка доступности определенного диска]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=130013#p130013" />
			<content type="html"><![CDATA[<p><strong>Rumata</strong>, похоже, что так.</p><div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Правда, приходится второй цикл организовывать, потому что вывод WMIC содержит лишние символы (нестандартный конец строки: CR CR LF)</p></blockquote></div><p>Это нормально. Я так же делаю.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2018-11-24T15:23:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=130013#p130013</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT/WMIC: проверка доступности определенного диска]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=130011#p130011" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>Что для таких псевдодисков говорит</p></blockquote></div><p>Это малоинформативно. Вот пример:<br /></p><div class="codebox"><pre><code>
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
...
</code></pre></div><p>Здесь я добавил в вывод еще одно поле VolumeName. Убрал из вывода фиксированные диски и subst-диски (во всех случаях они возвращают Description=Local Fixed Disk, DriveType=3, MediaType=12). <br />D - это флешка, вставлена постоянно<br />E - внутренее хранилище эл. книжки<br />G - пустой слот в ней же, флешки там нет.</p><p>Видно, что DriveType отображается, MediaType - пусто во всех случаях. VolumeName - видимо не является надежным индикатором. Видимо, только Size (и другие поля из этого семейства данных) самые надежные индикаторы доступности диска.</p><p>Следующий тест:<br /></p><div class="codebox"><pre><code>
for /f &quot;skip=1&quot; %d in ( &#039;wmic LogicalDisk GET Caption&#039; ) do @if exist %~d\. echo:%d - OK
C: - OK
D: - OK
E: - OK
U: - OK
Z: - OK
</code></pre></div><p>В примере выше проверка вызывает обращение к несуществующему диску и выводит диалоговое окно, при этом работа скрипта приостанавливается (в прикрепленной картинке пример работы данной команды):<br /></p><div class="codebox"><pre><code>
---------------------------
cmd.exe - No Disk
---------------------------
There is no disk in the drive. Please insert a disk into drive \Device\Harddisk4\DR4. 
---------------------------
Cancel   Try Again   Continue   
---------------------------
</code></pre></div><p>Видимо проверка на непустое значение размера диска - наиболее надежно (код из первого сообщения):<br /></p><div class="codebox"><pre><code>
for /f &quot;skip=1 tokens=1,2&quot; %%d in ( &#039;wmic LogicalDisk GET Caption^,Size&#039; ) do for %%s in ( %%~e ) do if exist &quot;%%~d\somefile&quot; (
	rem диск существует (размер ненулевой)
	rem на диске есть некоторый флаговый файл (в примере somefile)
	rem можно что-то сделать с этим диском
)
</code></pre></div><p>Правда, приходится второй цикл организовывать, потому что вывод WMIC содержит лишние символы (нестандартный конец строки: CR CR LF) и в параметр %e попадает первый символ CR. Здесь возможны два варианта: либо второй цикл, либо еще одна промежуточная переменная. Я выбрал цикл (здесь возможны варианты исполнения).</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2018-11-24T11:28:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=130011#p130011</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT/WMIC: проверка доступности определенного диска]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=129923#p129923" />
			<content type="html"><![CDATA[<p>Спасибо, <strong>alexii</strong>, за подсказки. Проверю -- отпишусь.</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2018-11-20T18:54:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=129923#p129923</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT/WMIC: проверка доступности определенного диска]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=129919#p129919" />
			<content type="html"><![CDATA[<p>Что для таких псевдодисков говорит:<br /></p><div class="codebox"><pre><code>wmic.exe LogicalDisk get Caption, Description, DriveType, MediaType</code></pre></div><p>?</p><p>Если такой диск «спросить» напрямую:<br /></p><div class="codebox"><pre><code>if exist &quot;Диск:\.&quot;</code></pre></div><p>— будет:<br /></p><div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>При обращении к такому &quot;устройству&quot; происходит ошибка и выскакивает диалоговое окно (даже при работе из батника).</p></blockquote></div><p>(мне не на чем проверить)?</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2018-11-20T17:10:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=129919#p129919</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[CMD/BAT/WMIC: проверка доступности определенного диска]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=129912#p129912" />
			<content type="html"><![CDATA[<p>Проверку доступности диска/ФС/определенного диска делаю так:<br /></p><div class="codebox"><pre><code>
for /f &quot;skip=1 tokens=1,2&quot; %%d in ( &#039;wmic LogicalDisk GET Caption^,Size&#039; ) do for %%s in ( %%~e ) do if exist &quot;%%~d\somefile&quot; (
	rem диск существует (размер ненулевой)
	rem на диске есть некоторый флаговый файл (в примере somefile)
	rem можно что-то сделать с этим диском
)
</code></pre></div><p>Пояснение:<br />-- wmic LogicalDisk GET Caption,Size<br />получаю список всех дисков (встроенные, подключаемые, usb и прочие) и их общие размеры</p><p>-- for %%s in ( %%~e ) do<br />проверяю размер диска: если диск действительно вставлен (а не просто пустой usb-слот), то размер - непустое значение, и данный цикл выполняется</p><p>Некоторые устройства (например, usb-модемы, эл.книжки) имеют пустой слот для дополнительной флешки. По умолчанию ОС этот диск отображает в списке устройств, но доступа к нему, естественно, нет. При обращении к такому &quot;устройству&quot; происходит ошибка и выскакивает диалоговое окно (даже при работе из батника). </p><p>Данное решение обходит этот недостаток. Но выглядит немного &quot;топорно&quot;. А есть ли еще другие варианты?</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2018-11-20T07:49:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=129912#p129912</id>
		</entry>
</feed>
