<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7724&amp;type=atom" />
	<updated>2012-11-12T17:47:22Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=7724</id>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65564#p65564" />
			<content type="html"><![CDATA[<p>спасибо тем, кто старался помочь, ответ найден...</p>]]></content>
			<author>
				<name><![CDATA[infodba]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28866</uri>
			</author>
			<updated>2012-11-12T17:47:22Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65564#p65564</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65395#p65395" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[infodba]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28866</uri>
			</author>
			<updated>2012-11-04T16:05:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65395#p65395</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65081#p65081" />
			<content type="html"><![CDATA[<p>Ну, почему же язык &quot;птичий&quot;? Там Вам вполне по-русски написано &quot;Режим вывод&nbsp; комнд на экран (ECHO) отключен.&quot;, что означает отсутствие аргумента у команды ECHO (на что я и намекал, интересуясь значением переменной TMPR). Просто для работы с пакетными файлами лучше использовать не Блокнот, а какую-нибудь альтернативу с поддержкой ДОС-кодировки, она же OEM, она же 866. Ещё можно в начале батника использовать команду CodePage: CP 1251. Вообще, для командного языка DOS/консоли Windows справка очень даже доступна: запустите cmd.exe (он-то и выполняет Ваши пакетные файлы) и наберите в его окне help...</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2012-10-24T18:20:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65081#p65081</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65070#p65070" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[infodba]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28866</uri>
			</author>
			<updated>2012-10-24T13:15:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65070#p65070</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65064#p65064" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2012-10-24T10:21:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65064#p65064</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65052#p65052" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[infodba]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28866</uri>
			</author>
			<updated>2012-10-23T20:25:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65052#p65052</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65030#p65030" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>infodba пишет:</cite><blockquote><p>Я так понимаю, count может решить мою проблему?</p></blockquote></div><p>Ну, имя переменной значения не имеет, просто Вам нужен счётчик, и тот, кто писал этот код, повидимому предполагал такую необходимость. Увеличивать значение переменной нужно внутри цикла for, а те действия, которые сейчас там выполняются - выполнять по условию if.</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2012-10-23T07:59:26Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65030#p65030</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65029#p65029" />
			<content type="html"><![CDATA[<p>В переменную count записать количество найденных совпадений а потом выбрать, с каким произвести замену?<br />Как это можно сделать?</p>]]></content>
			<author>
				<name><![CDATA[infodba]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28866</uri>
			</author>
			<updated>2012-10-23T07:32:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65029#p65029</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65025#p65025" />
			<content type="html"><![CDATA[<p>Я так понимаю, count может решить мою проблему? Помогите разобраться... как?</p>]]></content>
			<author>
				<name><![CDATA[infodba]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28866</uri>
			</author>
			<updated>2012-10-23T05:56:27Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65025#p65025</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65018#p65018" />
			<content type="html"><![CDATA[<p>У Вас в начале файла объявлена переменная count=0. Судя по имени - то, что доктор прописал, а Вы её не используете...</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2012-10-22T22:01:08Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65018#p65018</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[CMD/BAT: Парсинг оператором for (Выборочная замена)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=65005#p65005" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[infodba]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28866</uri>
			</author>
			<updated>2012-10-22T18:13:51Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=65005#p65005</id>
		</entry>
</feed>
