<?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: Парсинг оператором for (Выборочная замена)]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=7724</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7724&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «CMD/BAT: Парсинг оператором for (Выборочная замена)».]]></description>
		<lastBuildDate>Mon, 12 Nov 2012 17:47:22 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=65564#p65564</link>
			<description><![CDATA[<p>спасибо тем, кто старался помочь, ответ найден...</p>]]></description>
			<author><![CDATA[null@example.com (infodba)]]></author>
			<pubDate>Mon, 12 Nov 2012 17:47:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=65564#p65564</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=65395#p65395</link>
			<description><![CDATA[<p>В результате выполнения:<br /></p><div class="codebox"><pre><code>...
FOR /F &quot;eol=; tokens=* delims=, &quot; %%n in (!php.ini!) do (
...</code></pre></div><p>в файле все-равно съедаются строки начинающиеся с&nbsp; ; (точки с запятой)<br />Может кто-то сталкивался с подобной проблемой?</p>]]></description>
			<author><![CDATA[null@example.com (infodba)]]></author>
			<pubDate>Sun, 04 Nov 2012 16:05:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=65395#p65395</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=65081#p65081</link>
			<description><![CDATA[<p>Ну, почему же язык &quot;птичий&quot;? Там Вам вполне по-русски написано &quot;Режим вывод&nbsp; комнд на экран (ECHO) отключен.&quot;, что означает отсутствие аргумента у команды ECHO (на что я и намекал, интересуясь значением переменной TMPR). Просто для работы с пакетными файлами лучше использовать не Блокнот, а какую-нибудь альтернативу с поддержкой ДОС-кодировки, она же OEM, она же 866. Ещё можно в начале батника использовать команду CodePage: CP 1251. Вообще, для командного языка DOS/консоли Windows справка очень даже доступна: запустите cmd.exe (он-то и выполняет Ваши пакетные файлы) и наберите в его окне help...</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Wed, 24 Oct 2012 18:20:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=65081#p65081</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=65070#p65070</link>
			<description><![CDATA[<div class="quotebox"><cite>Serge Yolkin пишет:</cite><blockquote><p>А когда count не gtr 3, TMPR у Вас чему равен?</p></blockquote></div><p>Ну в результате выполнения получал файл:</p><div class="codebox"><pre><code>ђҐ¦Ё¬ ўлў®¤  Є®¬ ­¤ ­  нЄа ­ (ECHO) ®вЄ«озҐ­.
ђҐ¦Ё¬ ўлў®¤  Є®¬ ­¤ ­  нЄа ­ (ECHO) ®вЄ«озҐ­.
ђҐ¦Ё¬ ўлў®¤  Є®¬ ­¤ ­  нЄа ­ (ECHO) ®вЄ«озҐ­.
1
1</code></pre></div><p>То есть замена происходила во всех последующих совпадения (после трех найденных, которые затерлись &quot;птичьим языком&quot;). Мне этот вариант не подходит, хотя он наверное может где-то пригодиться, но думаю лучше указать с помощью ключа skip - с какой строки начинать, чтоб получить такой результат.<br /></p><div class="quotebox"><cite>Serge Yolkin пишет:</cite><blockquote><p>Кстати, почему gtr, а не equ?</p></blockquote></div><p>Потому что я noob...<br /></p><div class="quotebox"><cite>Serge Yolkin пишет:</cite><blockquote><p>Наверное, надо как-то так (не проверял)</p><div class="codebox"><pre><code>...
if !count! equ 3 set LINE=!LINE:%find1%=%replace1%!
Echo !LINE!&gt;&gt;TMP.TXT
...</code></pre></div></blockquote></div><p>Сергей Ёлкин, Вы абсолютно правы, я проверил - все работает, спасибо Вам.<br />Хотел спросить еще как заменить одну строку, тремя... постараюсь разобраться сам, но если не смогу опишу проблему в подробностях с примером ошибки. (не хочу флудить попусту)</p>]]></description>
			<author><![CDATA[null@example.com (infodba)]]></author>
			<pubDate>Wed, 24 Oct 2012 13:15:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=65070#p65070</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=65064#p65064</link>
			<description><![CDATA[<p>А когда count не gtr 3, TMPR у Вас чему равен? Кстати, почему gtr, а не equ?</p><div class="quotebox"><cite>infodba пишет:</cite><blockquote><p>замену произвести при третьем совпадении и дальше замену не производить</p></blockquote></div><p>Наверное, надо как-то так (не проверял)</p><div class="codebox"><pre><code>...
if !count! equ 3 set LINE=!LINE:%find1%=%replace1%!
Echo !LINE!&gt;&gt;TMP.TXT
...</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Wed, 24 Oct 2012 10:21:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=65064#p65064</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=65052#p65052</link>
			<description><![CDATA[<p>Мне бы примерчик....<br />Пишу:<br /></p><div class="codebox"><pre><code>...
SET COUNT=0
for /f &quot;tokens=*&quot; %%n in (!infile!) DO (
set /a count=!count!+1
set LINE=%%n
if !count! gtr 3 set TMPR=!LINE:%find1%=%replace1%!
Echo !TMPR!&gt;&gt;TMP.TXT
)
copy %infile% %infile%.bak
move TMP.TXT %infile%</code></pre></div><p>Правильного результата не получается, может надо использовать еще и метки?<br />Переменную count я объявлял, чтоб экспериментировать подобным образом, но успехов как видно - не достиг... поэтому после многочисленного поиска - решил написать на форум &lt;&lt;знатокам&gt;&gt;</p>]]></description>
			<author><![CDATA[null@example.com (infodba)]]></author>
			<pubDate>Tue, 23 Oct 2012 20:25:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=65052#p65052</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=65030#p65030</link>
			<description><![CDATA[<div class="quotebox"><cite>infodba пишет:</cite><blockquote><p>Я так понимаю, count может решить мою проблему?</p></blockquote></div><p>Ну, имя переменной значения не имеет, просто Вам нужен счётчик, и тот, кто писал этот код, повидимому предполагал такую необходимость. Увеличивать значение переменной нужно внутри цикла for, а те действия, которые сейчас там выполняются - выполнять по условию if.</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Tue, 23 Oct 2012 07:59:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=65030#p65030</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=65029#p65029</link>
			<description><![CDATA[<p>В переменную count записать количество найденных совпадений а потом выбрать, с каким произвести замену?<br />Как это можно сделать?</p>]]></description>
			<author><![CDATA[null@example.com (infodba)]]></author>
			<pubDate>Tue, 23 Oct 2012 07:32:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=65029#p65029</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=65025#p65025</link>
			<description><![CDATA[<p>Я так понимаю, count может решить мою проблему? Помогите разобраться... как?</p>]]></description>
			<author><![CDATA[null@example.com (infodba)]]></author>
			<pubDate>Tue, 23 Oct 2012 05:56:27 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=65025#p65025</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=65018#p65018</link>
			<description><![CDATA[<p>У Вас в начале файла объявлена переменная count=0. Судя по имени - то, что доктор прописал, а Вы её не используете...</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Mon, 22 Oct 2012 22:01:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=65018#p65018</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=65005#p65005</link>
			<description><![CDATA[<p>Использую следующий сценарий:<br /></p><div class="codebox"><pre><code>@echo off
setlocal enabledelayedexpansion
set infile=F:\test.conf
set find1=1
set replace1=2
set count=0
rem выбираю все содержимое файла
    for /F &quot;tokens=* delims=,&quot; %%n in (!infile!) do (
rem &quot;%%n&quot; - весь файл
    set LINE=%%n
    set TMPR=!LINE:%find1%=%replace1%!
rem Именно здесь происходит замена текущей строки!
    Echo !TMPR!&gt;&gt;TMP.TXT
rem Добавляем строку к временному файлу 
                    )
rem Делаем резервное копирование исходного файла, на случай что что то пойдет не так…
copy %infile% %infile%.bak
rem Заменяем исходный файл временным
move TMP.TXT %infile%</code></pre></div><p>В результате выполнения сценария из исходного test.conf со следующем содержанием:<br /></p><div class="codebox"><pre><code>1
1
1
1
1</code></pre></div><p>получаю:<br /></p><div class="codebox"><pre><code>2
2
2
2
2</code></pre></div><p>Хочу получить следующий результат:<br /></p><div class="codebox"><pre><code>1
1
2
1
1</code></pre></div><p>То-есть замену произвести при третьем совпадении и дальше замену не производить. Подскажите пожалуйста, как можно допилить батничек?<br />Про ключ skip - в курсе, notepad++ не предлагать, про сторонние утилиты типа sed, gsar тоже, но для моего случая это не подходит...<br />Необходимо что-то типа вот этого:<a href="http://www.cyberforum.ru/csharp-beginners/thread333200.html">http://www.cyberforum.ru/csharp-beginne … 33200.html</a> только bat, а не С#<br />Думаю может помочь вот эта информация: <a href="http://www.rsdn.ru/forum/dynamic/4600835.flat">http://www.rsdn.ru/forum/dynamic/4600835.flat</a><br />Признаюсь честно, думал обойдется поиском в гугле, но увы я не смог, буду рад любым подсказкам...</p>]]></description>
			<author><![CDATA[null@example.com (infodba)]]></author>
			<pubDate>Mon, 22 Oct 2012 18:13:51 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=65005#p65005</guid>
		</item>
	</channel>
</rss>
