<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; CMD/BAT/WMIC: проверка доступности определенного диска]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=14334</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=14334&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «CMD/BAT/WMIC: проверка доступности определенного диска».]]></description>
		<lastBuildDate>Sat, 24 Nov 2018 15:23:03 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: CMD/BAT/WMIC: проверка доступности определенного диска]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130013#p130013</link>
			<description><![CDATA[<p><strong>Rumata</strong>, похоже, что так.</p><div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Правда, приходится второй цикл организовывать, потому что вывод WMIC содержит лишние символы (нестандартный конец строки: CR CR LF)</p></blockquote></div><p>Это нормально. Я так же делаю.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Sat, 24 Nov 2018 15:23:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130013#p130013</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT/WMIC: проверка доступности определенного диска]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=130011#p130011</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sat, 24 Nov 2018 11:28:35 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=130011#p130011</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT/WMIC: проверка доступности определенного диска]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129923#p129923</link>
			<description><![CDATA[<p>Спасибо, <strong>alexii</strong>, за подсказки. Проверю -- отпишусь.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Tue, 20 Nov 2018 18:54:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129923#p129923</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT/WMIC: проверка доступности определенного диска]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129919#p129919</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Tue, 20 Nov 2018 17:10:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129919#p129919</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT/WMIC: проверка доступности определенного диска]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=129912#p129912</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Tue, 20 Nov 2018 07:49:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=129912#p129912</guid>
		</item>
	</channel>
</rss>
