<?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>https://forum.script-coding.com/viewtopic.php?id=7184</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7184&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «CMD/BAT: Вывод двоичных данных в файл».]]></description>
		<lastBuildDate>Sat, 12 May 2012 09:26:34 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: CMD/BAT: Вывод двоичных данных в файл]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60242#p60242</link>
			<description><![CDATA[<div class="quotebox"><cite>smaharbA пишет:</cite><blockquote><p>Дайте мне файл содержащий что то кроме - &quot;который гарантированно содержит все ASCII-символы от 0 до 255&quot;</p></blockquote></div><p>Дело в том, что рассматриваемая задача является достаточно неординарной, и с первого взгляда непонятно, что в ней нужно сделать, из-за чего она может показаться крайне простой<br />По Вашему конкретному вопросу могу сказать, что найти подобный файл, &quot;который гарантированно содержит <strong>все</strong> ASCII-символы от 0 до 255&quot;, не так и просто... Понятное дело, что можно заранее заготовить специальный файл, содержимое которого будет представлять что-то типа &quot;\x00\x01\x02 ....&nbsp; \xFF&quot;, но это не соответствует условиям задачи!<br /> Если взять крупный системный двоичный файл типа user32.dll, то скорее всего в нем будут вхождения <strong>каждого</strong> из ASCII-символов хотя бы по одному разу, но поиск будет очень долгим и не целесообразным <br />Собственно в силу указанной причины, такой метод бы расценен как крайне неэффективный, и поэтому убран из рассмотрения</p><div class="quotebox"><cite>smaharbA пишет:</cite><blockquote><p>На языке WMI JS, но там раюота с объектом FileSystemObject-&gt;TextStream некорректна для двоичных файлов... Изначально предполагал, что VBS и JS будут работать идентично в этой ситации, но как выяснилось сейчас, VBS по-другому хранит строки в памяти, и поэтому функция работает нормально</p></blockquote></div><p>Выполните такой код на языке JS, и Вы поймете о чем шла речь</p><div class="codebox"><pre><code>var fso=new ActiveXObject(&quot;Scripting.FileSystemObject&quot;)
var fl=fso.CreateTextFile(&quot;c:\\file.bin&quot;,true)
for(var i=128;i&lt;256;i++)
{var cur_asciiz=String.fromCharCode(i)
fl.Write(cur_asciiz)
}</code></pre></div><p>Несложно убедиться, что при выполнении подобного кода возникнет ошибка времени исполнения; Уже сейчас, после долгого разбора этого вопроса выяснилось, что проблема возникает из-за особенностей хранения строк в памяти в языке JS</p><p>Таким образом поставленная задача целиком и полностю решена, но возможно имеет смысл оставить эту тему, как напоминание о различии в методах хранения строковых значений в памяти в языках JS и VBS соответственно</p><p>P.S. Оригинальная статья - <a href="http://canegor.urc.ac.ru/gui_for_script/articles/bin_file.html">http://canegor.urc.ac.ru/gui_for_script … _file.html</a>, обратить внимание на фразу </p><div class="quotebox"><blockquote><p>Если Вы попытаетесь с помощью приведенных выше фрагментов работать с бинарным файлом, то код &quot;слетит&quot; с ошибкой периода времени выполнения. Работать с содержимым двоичных файлов средствами объекта ActiveX с progID = Scripting.FileSystemObject невозможно</p></blockquote></div><p>Как видно по текущей ветке на форуме, работать с содержимым двоичных файлов средствами объекта ActiveX с progID = Scripting.FileSystemObject все-таки возможно, но для этого нужно вынести функцию записи в файл на языка VBS, и передавать не строку JS, а массив ASCII-кодов байтов</p>]]></description>
			<author><![CDATA[null@example.com (BatLife)]]></author>
			<pubDate>Sat, 12 May 2012 09:26:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60242#p60242</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Вывод двоичных данных в файл]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60222#p60222</link>
			<description><![CDATA[<p>дайте мне файл содержащий что то кроме - &quot;который гарантированно содержит все ASCII-символы от 0 до 255&quot;</p><p>Вы не пан-директор случаем ?<br />уж очень это характерно<br />&quot;на языке WMI JS, но там раюота с объектом FileSystemObject-&gt;TextStream некорректна для двоичных файлов... Изначально предполагал, что VBS и JS будут работать идентично в этой ситации, но как выяснилось сейчас, VBS по-другому хранит строки в памяти, и поэтому функция работает нормально&quot;</p>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Fri, 11 May 2012 19:26:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60222#p60222</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Вывод двоичных данных в файл]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60008#p60008</link>
			<description><![CDATA[<div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>Создайте *.bat файлом такой *.vbs файл и запустите: &lt;code&gt;<br />появится файл C:\temp.txt, который содержит все символы от нулевого до 255-го включительно.</p></blockquote></div><p>Идеально получилось, благодарю за помощь! </p><p>Самое интересное заключалось в том, что подобное решение было изготовлено уже много дней назад, но на языке WMI JS, но там раюота с объектом FileSystemObject-&gt;TextStream некорректна для двоичных файлов... Изначально предполагал, что VBS и JS будут работать идентично в этой ситации, но как выяснилось сейчас, VBS по-другому хранит строки в памяти, и поэтому функция работает нормально</p><p>Решение получилось следующим, при этом write_bytes_array - определяемый в JS-секции массив записываемых кодов байтов</p><div class="codebox"><pre><code>Sub WriteBinFile
Set fso=CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set f = fso.OpenTextFile(&quot;c:\file.bin&quot;,2,1,0)
out_by_str=&quot;&quot;
For Each cv_out_bt in write_bytes_array
   out_by_str=out_by_str&amp;chr(cv_out_bt)
next
f.Write out_by_str
f.Close
End Sub</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (BatLife)]]></author>
			<pubDate>Sun, 06 May 2012 13:38:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60008#p60008</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Вывод двоичных данных в файл]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60007#p60007</link>
			<description><![CDATA[<p>Создайте *.bat файлом такой *.vbs файл и запустите:<br /></p><div class="codebox"><pre><code>str=&quot;&quot;
for i=0 to 255
   str=str&amp;chr(i)
next
Set fso=CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set f = fso.OpenTextFile(&quot;C:\temp.txt&quot;,2,1,0)
f.Write str
f.Close
Wscript.Quit</code></pre></div><p>появится файл C:\temp.txt, который содержит все символы от нулевого до 255-го включительно.</p>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Sun, 06 May 2012 12:15:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60007#p60007</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Вывод двоичных данных в файл]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60005#p60005</link>
			<description><![CDATA[<div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>debug.exe отсутствует в 64-битных системах. Используйте вспомогательный *.vbs файл.</p></blockquote></div><p>Спасибо за информацию! У меня нет 64-битной рабочей станции под рукой, и поэтому можно было бы сильно ошибиться, если пойти по такому пути<br />Использование сторонний VBS/JS-файл для решения задачи - в принципе не проблема, главное чтобы он отвечал все тем же поставленным требованиями,&nbsp; и не содержал в своем исходоном коде непечатаемых символов</p><p>Благодаря поиску по несколько другим ключевым словам, мне удалось найти решение, очень близкое к требуемому; Многие HEX-символы он уже обрабатывает, останется написать только несколько отдельных условий для тех элементов, которые нужно предварять специальным знаком с точки зрения BAT-синтаксиса, и еще отдельное решение для NUL-символа</p>]]></description>
			<author><![CDATA[null@example.com (BatLife)]]></author>
			<pubDate>Sun, 06 May 2012 11:23:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60005#p60005</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Вывод двоичных данных в файл]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60004#p60004</link>
			<description><![CDATA[<p>debug.exe отсутствует в 64-битных системах. Используйте вспомогательный *.vbs файл.</p>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Sun, 06 May 2012 11:17:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60004#p60004</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Вывод двоичных данных в файл]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60003#p60003</link>
			<description><![CDATA[<p>Спасибо за ответ, тем не менее видимо оригинальный вопрос был составлен мной неправильно, поскольку включал слишком много пунктов, и походил на просьбу о написании столь сложного приложения (Которое обойдется в копеечку :-)<br />Это не так, мне просто нужна консультация, без написания какого-либо программного кода в BAT-файле; хотя если есть ссылка на полезный материал, был бы благодарен</p><p>Итак формулирую вопросы крайне лаконично:<br />1 - Возможно ли в BAT-файле простым/очевидным образом осуществить <strong>вывод двоичной информации</strong>, которая в оригинальном BAT-файле указана <strong>в виде номеров этих байтов</strong>??<br />То есть на входе в функцию строка типа &quot;\00\01\02&quot;, а на выходе сами эти байты</p><p>2 - Можно ли какими-либо <strong>средствами командной строки</strong>, например встроенным редактором edlin.exe, проводить <strong>удаление заданных байтов в файле</strong></p><p>3 - На форуме здесь есть решение, позволяющее рптчить двоичные файлы <a href="http://forum.script-coding.com/viewtopic.php?id=2885">http://forum.script-coding.com/viewtopic.php?id=2885</a>; Вопрос к многоуважаемому автору, или тем кто хорошо ориентируется в этом решении - <strong>каков максимальный размер файла для патчинга</strong>? </p><p>Заранее спасибо</p>]]></description>
			<author><![CDATA[null@example.com (BatLife)]]></author>
			<pubDate>Sun, 06 May 2012 10:39:51 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60003#p60003</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Вывод двоичных данных в файл]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59992#p59992</link>
			<description><![CDATA[<p>нативе тулз &amp; технолоджис говорите?</p><p>Цена вопроса? (-</p>]]></description>
			<author><![CDATA[null@example.com (Аскет)]]></author>
			<pubDate>Sat, 05 May 2012 18:16:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59992#p59992</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: Вывод двоичных данных в файл]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59986#p59986</link>
			<description><![CDATA[<p>Здравствуйте, уважаемые знатоки BAT-технологии!<br />Прошу помочь разобраться с одним вопросом относительно BAT-файлов, который в интернете освещен совсем недостаточно, и найти полезные материалы по нему практически невозможно</p><p>Задача заключается в том, что необходимо с помощью BAT-приложения вывести в файл некоторый текст, который может содржать любые ASCII-символы, в том числе непечатаемые, но сам исходный код BAT-файла не должен содержать их<br />То есть нужно получить некоторое подибие функции print &quot;\xAB&quot; , где AB- это ASCII-КОД некоторого выводимого символа, а не его собственное включение</p><p>Можно придумать несколько вариатов решения, но перед тем как приступать к непосредственной реализации, хотелось узнать, возможно ли это, и насколько сложно, и реализуемо ли в разумными затратами времени<br />Важно отметить, что поставленная задача НЕ придумана просто так (От скуки :-), а является решением ряда других задач более высокого порядка; Это также ознаает, что для ее решения категорически нельзя использовать сторонние exe-файлы, кроме тех, что расположены в windows nt по умолчанию</p><p>1 вариант: С помощью цикла считать содержимое какого-либо гарантированно имеющегося двоичного файла, который гарантированно содержит все ASCII-символы от 0 до 255, и скопировать его собственный образ в переменную окружения<br />Такой вариант решения должен дать гарантированное решение задачи, но является крайне сложным; Действительно, во-первых необходимо получить ASCII-коды считываемых символов, это можно сделать через hexdumper, но уже достаточно проблематично<br />К тому же, в таком случае требуется получить двоичный файл, содержащий все возможные ASCII-символы, а это нетривиальная задача, да и к тому же противоречивая: чтобы быть уверенным в наличии всех символов, файл должен быть огромным, но тогда программа будет работать невозможно медленно</p><p>2 вариант: Можно решить оригинальную задачу несколько другим путем, в таком случае задача несколько переформулируется: Нужно иметь возможность удалить некоторые байты в заданном двоичном файле<br />Необходимы учитывать, что требуется именно удаление байтов, со смещением содержимого всего оставшегося файла, а не из замена к примеру нулевыми значениями<br />Если конкретизировать задачу, но удалить *всегда* требуется первые два байта, которые равны одной и той же конснанте - маркеру обрятного порядка байт в UCS-2, то есть комбинации 0xFE 0xFF</p><p>3 вариант: Можно целиком построить требуемый двоичный файл на основе предложенного на форуме решения, основанного на debug.exe; Такой вариает являлся бы допустимым, если размер целевого файла не был ограничен небольшим значением<br />На практике требуется построение произвольного двоичного файла, имеющего размер порядка 10kb - 3Mb</p><p>Заранее спасибо!</p>]]></description>
			<author><![CDATA[null@example.com (BatLife)]]></author>
			<pubDate>Sat, 05 May 2012 10:53:51 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59986#p59986</guid>
		</item>
	</channel>
</rss>
