<?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: Проблема создания уникальных значений в конвейерных командах]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=6256</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=6256&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «CMD/BAT: Проблема создания уникальных значений в конвейерных командах».]]></description>
		<lastBuildDate>Mon, 28 Apr 2014 13:24:23 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: CMD/BAT: Проблема создания уникальных значений в конвейерных командах]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=82384#p82384</link>
			<description><![CDATA[<p><strong>nicestep</strong><br />Ваше решение хорошо, но уверенности что генерируемые значения уникальны нет. PID гарантирует уникальное значениев в текущий момент времени.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Mon, 28 Apr 2014 13:24:23 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=82384#p82384</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Проблема создания уникальных значений в конвейерных командах]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=82383#p82383</link>
			<description><![CDATA[<p>Забавно, что в рамках обсуждения решение проблемы уже было озвучено, но все зачем-то закрутилось вокруг PID процесса, который, в принципе, не нужен вовсе. Используем генерацию GUID из PowerShell.</p><div class="codebox"><pre><code>
rem True random temp folder

set tempDir=%temp%\MyScript
for /f &quot;usebackq&quot; %%a in (`powershell -command &quot;$([guid]::NewGuid().ToString())&quot;`) do (
    set tempDir=%tempDir%%%a
)
</code></pre></div><p>У приведенного примера есть только один недостаток - внешний вызов PowerShell - довольно медлительная процедура</p>]]></description>
			<author><![CDATA[null@example.com (nicestep)]]></author>
			<pubDate>Mon, 28 Apr 2014 12:43:31 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=82383#p82383</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Проблема создания уникальных значений в конвейерных командах]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=79042#p79042</link>
			<description><![CDATA[<p>Снова решил поиграться в эту &quot;игру&quot;. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Узнать PID командного интерпретатора можно с помощью PowerShell. Можно было бы соорудить подобные примеры и с использованием WMIC. Они были бы очень похожи на то, что предлагал коллега <strong>UNDYING</strong>. Но фильтрация нужного экземпляра WMIC, к сожалению, невозможна. </p><p>Отобразить PID<br /></p><div class="codebox"><pre><code>
:: $pid - PID powershell
::
:: этот код находит себя в списке процессов и 
:: выводит PPID (родительский PID), 
:: который является PID интерпретатора
powershell -NoLogo -NoProfile -Command &quot;$p = (Get-WmiObject Win32_Process -Filter ProcessId=$pid).ParentProcessId; $p&quot;
</code></pre></div><p>Запомнить PID<br /></p><div class="codebox"><pre><code>
:: Здесь чуть посложнее: надо пройтись по дереву процессов полгубже, 
:: так как скрипт порождает еще одну копию интерпретатора. 
::
:: $pid - PID powershell
:: $p - PID копии интерпретатора
::
:: powershell нахрдит себя в списке процессов, 
:: запоминает PID интерпретатора и ищет PID родителя еще раз, 
:: чтобы получить PPID внешнего интерпретатора
for /f %%p in ( &#039;
    powershell -NoLogo -NoProfile -Command &quot;$p = (Get-WmiObject Win32_Process -Filter ProcessId=$pid).ParentProcessId; (Get-WmiObject Win32_Process -Filter ProcessId=$p).ParentProcessId&quot; ^&lt;nul
&#039; ) do (
    set &quot;PID=%%p&quot;
)
</code></pre></div><p>Желающие могут потестировать следующий код, создавая несколько экземпляров скрипта, и убедиться, что каждый экземпляр создает уникальное значение, соответствующее PID интерпретатора. Для иллюстрации выводится значение переменой %RANDOM%. <br /></p><div class="codebox"><pre><code>
:: Чтобы наблюдать уникальные значения рекомендуется 
:: запускать скрипт в конвейре. Для визуального различия 
:: каждого экземпляра надо указать в качестве параметра 
:: любое уникальное значение. Например
::
:: z 1 | z 2 | z 3
::
:: Каждый экземпляр выводит: 
:: 1. значение первого параметра
:: 2. PID интерпретатора
:: 3. Псевдослучайное значение из %RANDOM%
@echo off

for /f %%p in ( &#039;
    powershell -NoLogo -NoProfile -Command &quot;$p = (Get-WmiObject Win32_Process -Filter ProcessId=$pid).ParentProcessId; (Get-WmiObject Win32_Process -Filter ProcessId=$p).ParentProcessId&quot; ^&lt;nul
&#039; ) do (
    echo:%~1: %%p: %RANDOM%
)&gt;&amp;2
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Thu, 09 Jan 2014 12:41:05 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=79042#p79042</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Проблема создания уникальных значений в конвейерных командах]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=59038#p59038</link>
			<description><![CDATA[<p>Потестировал. </p><p>Практически все консольные утилиты отпадают, так как <br />-- некоторые из них не могу быть созданы в &quot;скрытом&quot; (не знаю как сказать точно) состоянии, то есть при их создании мелькает консольное окно. Перенаправление STDOUT?STDERR не помогают. Пример: PING<br />-- некоторые консольные утилиты можно создать без мелькания окна, но они создаются так быстро, что происходит коллизия. Пример: HOSTNAME</p><p>Графические тоже. Так как практически нет ни одной графической утилиты, которая не рисовала бы интерфейс. HH - исключение, но при ее использовании все-таки возникают коллизии. MSHTA - остается в памяти: надо выгружать вручную. </p><p>Остались 2 более-менее подходящие:<br />SVCHOST - но как посмотрят антивирусы на ее запуск (%windir%\System32\svchost.exe)<br />WSCRIPT //B - пока единственная более-менее надежная команда, которую можно запустить и которая пока ни разу не привела к коллизиям. Хотя коллизии теоретически возможны и с нею. </p><p>Следующий скрипт - <strong>z.bat</strong> использовался во всех тестах. Менялся только запускаемый процесс (строка <strong>set &quot;proc=...&quot;</strong>). </p><p>Скрипт создает временный файл вида <strong>tmp.HHMMSS,CC_UID.tmp</strong> (HH - часы, MM - минуты, SS - секунды, CC - сотые секунды, UID - номер процесса). Содержимое файла - имя самого файла и первый аргумент, если он передан скрипту. <br /></p><div class="codebox"><pre><code>@echo off

set &quot;proc=wscript.exe //b&gt;nul&quot;

:again
for /f &quot;tokens=1,2 delims==; &quot; %%a in ( 
    &#039;%windir%\System32\Wbem\wmic.exe Process call create &quot;%windir%\System32\%proc%&quot; 2^&gt;nul ^| %windir%\System32\find.exe &quot;ProcessId&quot;&#039; 
) do (
    set UID=%%b
)

set UTIME=%TIME%

set UTIME=%UTIME: =0%
set UTIME=%UTIME::=%

set tmpfile=tmp.%UTIME%_%UID%.tmp

if exist tmpfile goto again

echo.%1: %tmpfile%&gt;&gt;&quot;%tmpfile%&quot;</code></pre></div><p>Этот скрипт запускает предыдущий многократно. Для упрощения теста использовались утилиты из пакета <a href="http://unxutils.sf.net">UnxUtils</a>. Тестовый скрипт вызывается в конвейере <strong>z 1 | z 2</strong>, 200 раз <strong>for /l %%l in ( 1, 1, 200 )</strong>. В результате должно быть создано 400 файлов. <br /></p><div class="codebox"><pre><code>@echo off

del tmp*

if not &quot;%~1&quot; == &quot;&quot; goto :EOF

echo.ERRORS
(

for /l %%l in ( 1, 1, 200 ) do @( z 1 | z 2 )

) 2&gt;&amp;1 | sort | uniq -c

echo.SUMMARY
ls -l tmp* | gawk &quot;{ print $5 }&quot; | sort | uniq -c | tee con | gawk &quot;BEGIN { N = 0 } { N += $1 } END { print N }&quot;</code></pre></div><p>А вот тестовые результаты:<br /><strong>hostname.exe&gt;nul</strong><br />Из 400 файлов вида <strong>tmp.HHMMSS,CC_UID.tmp</strong> было создано только 353. Из них, 319 файлов размером 27 байт содержат по одной строке (как и должно быть). 34 файла содержат по две строки (54 байта), что значит два процесса писали в один файл. 13 раз конвейер был вызван с ошибкой. <br /></p><div class="quotebox"><blockquote><p>ERRORS<br />&nbsp; &nbsp; &nbsp;13 The process cannot access the file because it is being used by another p<br />rocess.<br />SUMMARY<br />&nbsp; &nbsp; 319 27<br />&nbsp; &nbsp; &nbsp;34 54<br />353</p></blockquote></div><p><strong>wscript.exe //b</strong><br />Было создано 11, 371 и 18 файлов, соответственно, длиной 26, 27 и 28 байт, содержащие ровно по одной строке. Всего 400 файлов. Различие в размерах связана с длиной строки, обозначающей номер процесса (3, 4 или 5 цифр), которая суммируется с количеством остальных символов. <br /></p><div class="quotebox"><blockquote><p>ERRORS<br />SUMMARY<br />&nbsp; &nbsp; &nbsp;11 26<br />&nbsp; &nbsp; 371 27<br />&nbsp; &nbsp; &nbsp;18 28<br />400</p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sun, 08 Apr 2012 18:24:48 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=59038#p59038</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Проблема создания уникальных значений в конвейерных командах]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58974#p58974</link>
			<description><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>mshta - нельзя, потому что этот процесс будет висеть в памяти. и его надо выгружать вручную. <br />hh - видимо можно.</p></blockquote></div><p>Экспериментировал на Windows Server 2008 R2 SP1, mshta на данной системе не &quot;зависал&quot; в памяти, как я понимаю, на др. редакциях необходимо выгружать. hh - точно не должен висеть после запуска без параметров.<br /></p><div class="quotebox"><blockquote><p>Кстати его интересно запустить с параметром, например hh &quot;c:\Program Files&quot;. Кавычки необязательны.</p></blockquote></div><p>Сказывается использование движка IE. Сам IE (и просто explorer, который всё больше интегрируется с IE, для вышеуказанного метода его многие и используют <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> ), по сути, может точно так же.<br /></p><div class="quotebox"><blockquote><p>Как я понял, SVCHOST это системный файл, должен запускаться только как служба и не от пользователя. То есть, в этом плане, безопасно. Другой момент, как на создание нового процесса svchost.exe могут отреагировать антивирусы.</p></blockquote></div><p>Ну не только как служба, на эту тему гуглить надо. Впринципе, если запускать без параметров, ничего страшного быть не должно и опасности никакой не представляется, только, как вы говорите, антивирусы &quot;кричать&quot; могут.</p>]]></description>
			<author><![CDATA[null@example.com (UNDYING)]]></author>
			<pubDate>Sat, 07 Apr 2012 11:47:46 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58974#p58974</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Проблема создания уникальных значений в конвейерных командах]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58970#p58970</link>
			<description><![CDATA[<p>Как я понял, SVCHOST это системный файл, должен запускаться только как служба и не от пользователя. То есть, в этом плане, безопасно. Другой момент, как на создание нового процесса svchost.exe могут отреагировать антивирусы. </p><div class="quotebox"><cite>UNDYING пишет:</cite><blockquote><p>wscript //b - точно неопасно и мелькать не должно. Ну или любое другое GUI приложение, не создающее окна - hh, mshta etc.</p></blockquote></div><p>mshta - нельзя, потому что этот процесс будет висеть в памяти. и его надо выгружать вручную. <br />hh - видимо можно. Кстати его интересно запустить с параметром, например hh &quot;c:\Program Files&quot;. Кавычки необязательны.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sat, 07 Apr 2012 11:03:12 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58970#p58970</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Проблема создания уникальных значений в конвейерных командах]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58968#p58968</link>
			<description><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Вопрос. Метод, предложенный <strong>UNDYING</strong>, работает замечательно. Но, как он уже заметил - &quot;мелькает&quot; окно консоли. Я подумал как запускать что-то, и чтобы оно не мелькало. Нашел, что <strong>svchost</strong> при обычном запуске в консоль ничего не пишет и просто &quot;отваливается&quot;, так как (судя по всему он должен запускаться как сервис. Не опасно ли вызывать создание <strong>svchost</strong> для получения уникального значения, чтобы избавиться от моргания консольного окна?</p></blockquote></div><p>Чёрт знает, опасно или не опасно. <strong>svchost</strong> и <strong>cmd /c</strong> легко меняется на <strong>wscript //b</strong> - точно неопасно и мелькать не должно. Ну или любое другое GUI приложение, не создающее окна - <strong>hh</strong>, <strong>mshta</strong> etc.<br />SVCHOST точно должен запускаться с параметрами (если через тот же WMI-запрос посмотреть ком.строку у всех svchost), тогда он будет запускать что-то &quot;полезное&quot;.</p>]]></description>
			<author><![CDATA[null@example.com (UNDYING)]]></author>
			<pubDate>Sat, 07 Apr 2012 09:52:20 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58968#p58968</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Проблема создания уникальных значений в конвейерных командах]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58946#p58946</link>
			<description><![CDATA[<p><strong>alexii</strong><br />Без 2&gt;nul у меня в консоли появляется одна пустая строка вначале. Когда сделал перенаправление - пустая строка исчезла. </p><p>Вопрос. Метод, предложенный <strong>UNDYING</strong>, работает замечательно. Но, как он уже заметил - &quot;мелькает&quot; окно консоли. Я подумал как запускать что-то, и чтобы оно не мелькало. Нашел, что <strong>svchost</strong> при обычном запуске в консоль ничего не пишет и просто &quot;отваливается&quot;, так как (судя по всему он должен запускаться как сервис. Не опасно ли вызывать создание <strong>svchost</strong> для получения уникального значения, чтобы избавиться от моргания консольного окна?</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Fri, 06 Apr 2012 21:16:31 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58946#p58946</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Проблема создания уникальных значений в конвейерных командах]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58944#p58944</link>
			<description><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Еще добавлю, для полноты ответа, что неплохо STDERR перенаправлять в NUL:</p></blockquote></div><p>Угу. Часто забываешь об этом.</p><div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Это необходимо, чтобы исключить вывод пустой строки.</p></blockquote></div><p>Не понял, каким образом? У меня что:<br /></p><div class="codebox"><pre><code>wmic.exe bla-bla-vbla</code></pre></div><p>что<br /></p><div class="codebox"><pre><code>wmic.exe bla-bla-vbla 2&gt;nul</code></pre></div><p>при перенаправлении в файл дают полностью идентичный файл. От лишнего же я избавляюсь как раз применением «find.exe».</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Fri, 06 Apr 2012 20:53:25 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58944#p58944</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Проблема создания уникальных значений в конвейерных командах]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58942#p58942</link>
			<description><![CDATA[<p><strong>alexii</strong><br />Еще добавлю, для полноты ответа, что неплохо STDERR перенаправлять в NUL:<br /></p><div class="codebox"><pre><code>for /f &quot;usebackq …&quot; %%i in (`wmic.exe … where &quot;bla-bla-bla=&#039;bla-bla-bla2&#039;&quot; 2^&gt;nul ^| find.exe /i &quot;bla-bla-bla&quot;`) do …</code></pre></div><p>Это необходимо, чтобы исключить вывод пустой строки. У меня при каждом использовании WMIC выводится пустая строка. При перенаправлении <strong>2&gt;nul</strong> пустая строка исчезает.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Fri, 06 Apr 2012 20:08:16 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58942#p58942</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Проблема создания уникальных значений в конвейерных командах]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58938#p58938</link>
			<description><![CDATA[<p><strong>alexii</strong><br />Спасибо, будем знать и применять.</p>]]></description>
			<author><![CDATA[null@example.com (UNDYING)]]></author>
			<pubDate>Fri, 06 Apr 2012 19:10:38 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58938#p58938</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Проблема создания уникальных значений в конвейерных командах]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58937#p58937</link>
			<description><![CDATA[<p><strong>UNDYING</strong><br />Ого! А ведь мне чуть-чуть не хватило додуматься до этого. Спасибо!</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Fri, 06 Apr 2012 19:05:55 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58937#p58937</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Проблема создания уникальных значений в конвейерных командах]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58935#p58935</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Кто ж знал, что в for, wmic надо юзать по-особому,</p></blockquote></div><div class="codebox"><pre><code>for /f &quot;usebackq …&quot; %%i in (`wmic.exe … where &quot;bla-bla-bla=&#039;bla-bla-bla2&#039;&quot; ^| find.exe /i &quot;bla-bla-bla&quot;`) do …</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Fri, 06 Apr 2012 18:51:46 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58935#p58935</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Проблема создания уникальных значений в конвейерных командах]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58933#p58933</link>
			<description><![CDATA[<p><strong>Rumata</strong><br />OFF: Я видимо полюбил wmic, столько мата не извергал из себя давно...</p><p>Так-с, не выдержал и потестил:<br /><strong>z.bat</strong><br /></p><div class="codebox"><pre><code>@echo off
setlocal
for /f &quot;skip=5 tokens=1,3&quot; %%a in (&#039;wmic Process call create &quot;cmd.exe /c&quot;&#039;) do (if &quot;%%a&quot; == &quot;ProcessId&quot; set uid=%%b)
set uid=%uid:~0,-1%
echo %uid%
endlocal &amp; exit /b</code></pre></div><p><strong>x.bat</strong><br /></p><div class="codebox"><pre><code>@echo off
for /l %%a in (1,1,100) do (z|z)
exit /b</code></pre></div><p>Ваша мечта сбылась - uid будет уникален и для <strong>z | z</strong>, и для<strong> z | z | z | z</strong> ; передавать скрипту ничего не надо, только вместо<strong> &quot;cmd.exe /c&quot;</strong> можно заюзать <strong>wscript.exe</strong> - чтоб не мелькало. Тестируйте и, если подойдёт, принимайте на вооружение.</p><p>OFF: Кто ж знал, что в <strong>for</strong>, <strong>wmic</strong> надо юзать по-особому, и вариант, который нормально выполняется вне источника для <strong>for /f</strong>, не катит...</p>]]></description>
			<author><![CDATA[null@example.com (UNDYING)]]></author>
			<pubDate>Fri, 06 Apr 2012 17:51:58 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58933#p58933</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Проблема создания уникальных значений в конвейерных командах]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=58930#p58930</link>
			<description><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><div class="quotebox"><cite>UNDYING пишет:</cite><blockquote><p>if exist tmp\%ppid% (echo. &gt; tmp\%ppid%_%1) else (echo. &gt; tmp\%ppid%_%1)</p></blockquote></div><p>Объясните что значит этот код?! Что Вы хотели этим сказать?</p></blockquote></div><p>Только сейчас заметил, что цитата с моей ошибкой, чуть позднее исправленной. <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /> Спать мне надо, хотя бы иногда...<br /></p><div class="quotebox"><blockquote><p>абсолютно не приемлемы, задача должна решаться средствами только ОС.</p></blockquote></div><p>OFF: Мне вспонились ребята из Иваново, распространявшие со свой специфичной системой биллинга (честно - не знаю как верно пишется, с л или лл) 400-килобайтный &quot;экзешник&quot; (по размерам - явно на делфях) для перемещения файлов по маске, dir /s и пара if&#039;ов в пару кбайт размером, им явно не угодили... И не забуду супербатники от них же, правда &quot;исправляются&quot;, со временем, видимо, перейдут целиком на микс из Java и .Net.</p><div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Name LIKE <strong>&#039;cmd%%&#039;</strong></p></blockquote></div><p>этот момент меня только смущает, по-моему в Name может быть как <strong>cmd</strong>, так и <strong>cmd.exe</strong> (по условию проверки оба проходят), а в некоторых случаях и что-то вроде <strong>C:\Windows\System32\cmd.exe</strong>.</p><p>Вообще, изначально я пытался создать &quot;левый&quot; процесс (экземпляр cmd.exe с ключом /c) с помощью <strong>wmic process call create CommandLine=&quot;cmd.exe /c&quot;</strong> - передавать скрипту в этом случае вообще ничего не надо и вероятность коллизий минимальна, но не смог подружить wmic и конвейер |.<br /></p><div class="codebox"><pre><code>for /f &quot;tokens=2 delims=:&quot; %%a in (&#039;wmic process call create CommandLine=&quot;cmd.exe /c&quot; ^| find /i &quot;ProcessId&quot;&#039;) do (echo %%a)</code></pre></div><p>Нет ли у кого соображений как это заставить работать?<br />Попробую ещё через if и для двух токенов. Но, видимо, это будет завтра.<br /></p><div class="codebox"><pre><code>for /f &quot;tokens=1,2 delims=:&quot; %%a in (&#039;wmic process call create CommandLine=&quot;cmd.exe /c&quot;&#039;) do (if &quot;%%a&quot; == &quot;ProcessID&quot; set ppid=%%b)
set ppid=%ppid:~-1%</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (UNDYING)]]></author>
			<pubDate>Fri, 06 Apr 2012 16:32:49 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=58930#p58930</guid>
		</item>
	</channel>
</rss>
