<?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=9224</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9224&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «CMD/BAT: При замене текста удаляются пустые строки, а не должны».]]></description>
		<lastBuildDate>Mon, 10 Feb 2014 07:29:10 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: CMD/BAT: При замене текста удаляются пустые строки, а не должны]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=79953#p79953</link>
			<description><![CDATA[<p><strong>shiz</strong>, большое спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (AdBes)]]></author>
			<pubDate>Mon, 10 Feb 2014 07:29:10 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=79953#p79953</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: При замене текста удаляются пустые строки, а не должны]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=79839#p79839</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Ключи команды find /c /v выполняют противоположные действия, подскажите, пожалуйста, правильно ли я понимаю, что при сочетании этих ключей получается более точные поиск искомой строки?</p></blockquote></div><p>Не правильно: ключ /v выполняет противоположное действие не ключу /c, а отсутствию ключа /v, т.е. подсчитывается число строк НЕ содержащих заданную.<br /></p><div class="quotebox"><blockquote><p>Правильно ли я понимаю, что это &quot;&quot; обозначение пустой строки?</p></blockquote></div><p>Правильно. Почему-то пустая строка считается не содержащейся ни в какой, т.е. просто подсчитывается количество всех строк.<br /></p><div class="quotebox"><blockquote><p>Подскажите, пожалуйста, зачем выполняется экранирование ^&lt;</p></blockquote></div><p>Понимание приходит с опытом (и опытами). Не знаю даже, смогу ли объяснить словами. Вероятно потому, что &lt; не попадает между двойных кавычек и перенаправление не относится к анализируемой в первую очередь команде (for).<br /></p><div class="quotebox"><blockquote><p>Подскажите, пожалуйста, что означает (1 1 %n%) ?</p></blockquote></div><p><a href="http://forum.script-coding.com/viewtopic.php?pid=65907#p65907">То же самое, что и (1,1,%n%).</a><br /></p><div class="quotebox"><blockquote><div class="codebox"><pre><code>set LINE=</code></pre></div><p>Подскажите, пожалуйста, это добавление пустой строки?</p></blockquote></div><p>Следующей идёт команда set с ключом /p - если на её вход подать пустую строку, то переменная не сбросится, а сохранит старое значение. Поэтому в большинстве случаев перед set /p желательно удалить переменную.<br /></p><div class="quotebox"><blockquote><p>Ключ /p означает ввод значения с клавиатуры, но в данном случае этого не происходит. Подскажите, пожалуйста, почему?</p></blockquote></div><p>Ключ /p означает ввод строки из стандарного входного потока. В составной команде, содержащей set /p, в качестве входного потока используется файл с именем содержащимся в переменной %file%, т.е. ввод производится из этого файла:<br /></p><div class="codebox"><pre><code>(
 . . .
  set /p &quot;LINE=&quot;
 . . .
)&lt;&quot;%file%&quot;&gt;tmp.txt</code></pre></div><div class="quotebox"><blockquote><p>Двойной процент %% означает вывод на экран символа %. Сомневаюсь, что в данном случае подразумевается именно вывод символа %. Расшифруйте, пожалуйста, назначение процентов в данной строке</p></blockquote></div><p>Здесь используется команда call для отложенного раскрытия переменной (я, правда, предпочёл бы обозначение с восклицательными знаками).<br />Кое-что объясняется здесь: <a href="http://rsdn.ru/article/winshell/NTCommandProcessor.xml#EBUAE">http://rsdn.ru/article/winshell/NTComma … .xml#EBUAE</a> (не всё в этой статье стоит принимать на веру). <br /></p><div class="quotebox"><blockquote><p>Сочетание &gt;nul означает запрет вывода на экран команды и ее действия.</p></blockquote></div><p>Вывода, но не действия.<br /></p><div class="quotebox"><blockquote><p>Подскажите, пожалуйста, что означает сочетание &lt;nul</p></blockquote></div><p>Ввод из пустого потока (т.е. сразу достигается конец файла, при попытке всё-равно что-то прочесть возвращается пустая строка). О смысле использования с командой set /p см. тему <a href="http://forum.script-coding.com/viewtopic.php?id=2945">CMD/BAT: вывод текста без переноса на новую строку</a>.</p>]]></description>
			<author><![CDATA[null@example.com (shiz)]]></author>
			<pubDate>Fri, 07 Feb 2014 16:24:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=79839#p79839</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: При замене текста удаляются пустые строки, а не должны]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=79829#p79829</link>
			<description><![CDATA[<p><strong>Yury</strong>, Большое спасибо.<br />Разбирала написанный Вами код, и к сожалению, не смогла найти ответы на некоторые возникшие вопросы.<br />Буду очень благодарна, если Вы на них ответите.</p><p><strong><span class="bbu">Разбор строки</span></strong><br /></p><div class="codebox"><pre><code>for /f %%i in (&#039;find /c /v &quot;&quot;^&lt;&quot;%file%&quot;&#039;) do set n=%%i</code></pre></div><p><span class="bbu">Вопросы:</span><br /></p><ol class="decimal"><li><p>Ключи команды <strong>find /c /v</strong> выполняют противоположные действия, подскажите, пожалуйста, правильно ли я понимаю, что при сочетании этих ключей получается более точные поиск искомой строки?</p></li><li><p>Правильно ли я понимаю, что это <strong>&quot;&quot;</strong> обозначение пустой строки?</p></li><li><p>Подскажите, пожалуйста, зачем выполняется экранирование <strong>^&lt;</strong></p></li></ol><br /><p><strong><span class="bbu">Разбор строки</span></strong><br /></p><div class="codebox"><pre><code>for /l %%i in (1 1 %n%) do (</code></pre></div><p><span class="bbu">Вопрос:</span><br /></p><ul><li><p>Подскажите, пожалуйста, что означает <strong>(1 1 %n%)</strong> ?</p></li></ul><br /><p><strong><span class="bbu">Разбор строки</span></strong><br /></p><div class="codebox"><pre><code>set LINE=</code></pre></div><p><span class="bbu">Вопрос:</span><br /></p><ul><li><p>Подскажите, пожалуйста, это добавление пустой строки?</p></li></ul><br /><p><strong><span class="bbu">Разбор строки</span></strong><br /></p><div class="codebox"><pre><code>set /p &quot;LINE=&quot;</code></pre></div><p><span class="bbu">Вопрос:</span><br /></p><ul><li><p>Ключ <strong>/p</strong> означает ввод значения с клавиатуры, но в данном случае этого не происходит. Подскажите, пожалуйста, почему?</p></li></ul><br /><p><strong><span class="bbu">Разбор строки</span></strong><br /></p><div class="codebox"><pre><code>if defined LINE call set /p&quot;=%%LINE:%search%=%change%%%&quot;&lt;nul</code></pre></div><p><span class="bbu">Вопросы:</span><br /></p><ol class="decimal"><li><p>Двойной процент <strong>%%</strong> означает вывод на экран символа <strong>%</strong>. Сомневаюсь, что в данном случае подразумевается именно вывод символа <strong>%</strong>. Расшифруйте, пожалуйста, назначение процентов в данной строке </p></li><li><p>Сочетание <strong>&gt;nul</strong> означает запрет вывода на экран команды и ее действия. Подскажите, пожалуйста, что означает сочетание <strong>&lt;nul</strong></p></li></ol><p>Заранее спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (AdBes)]]></author>
			<pubDate>Fri, 07 Feb 2014 09:02:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=79829#p79829</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: При замене текста удаляются пустые строки, а не должны]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=79817#p79817</link>
			<description><![CDATA[<div class="codebox"><pre><code>@echo off
:: указываем файл
    set file=.\web-inf\classes\tops\unicus\resources\unicus.properties
:: ввести строку для поиска
    set /p search=[enter text to search]
:: ввести строку для замены
    set /p change=[enter the text to change]

 for /f %%i in (&#039;find /c /v &quot;&quot;^&lt;&quot;%file%&quot;&#039;) do set n=%%i
(
 for /l %%i in (1 1 %n%) do (
  set LINE=
  set /p &quot;LINE=&quot;
  if defined LINE call set /p&quot;=%%LINE:%search%=%change%%%&quot;&lt;nul
  if %%i==%n% goto exit
  echo.
 )
)&lt;&quot;%file%&quot;&gt;tmp.txt

:exit
:: делаем резервное копирование исходного файла
    copy &quot;%file%&quot; &quot;%file%.bak&quot;&gt;nul
:: заменяем исходный файл временным
    move tmp.txt &quot;%file%&quot;&gt;nul
exit /b</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Yury)]]></author>
			<pubDate>Thu, 06 Feb 2014 15:20:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=79817#p79817</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: При замене текста удаляются пустые строки, а не должны]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=79816#p79816</link>
			<description><![CDATA[<p>Доброго времени суток.<br />Помогите, пожалуйста.</p><p>Задача: изменить текст в txt-файле.<br />Решение:<br /></p><div class="codebox"><pre><code> @echo off
cls
setlocal enabledelayedexpansion
:: указываем файл
    set file=.\WEB-INF\classes\tops\unicus\resources\unicus.properties
:: ввести строку для поиска
    set /p search=[enter text to search]
:: ввести строку для замены
    set /p change=[enter the text to change]
    @echo off
    setlocal enabledelayedexpansion
    set COUNT=0
:: ищем строку и заменяем
    for /F &quot;usebackq tokens=*&quot; %%s in (!file!) do (
            set LINE=%%s
            ::замена текущей строки
            set TMPR=!LINE:%search%=%change%!
            ::добавляем строку к временному файлу
            Echo.!TMPR!&gt;&gt;TMP.TXT                 
    )
    :: Делаем резервное копирование исходного файла, на случай что что то пойдет не так…
    copy %file% %file%.bak
    :: Заменяем исходный файл временным
    move TMP.TXT %file%</code></pre></div><p>Проблема: при замене текста удаляются пустые строки, а не должны</p><p>Пробовала разные варианты, результат одинаковый: текст меняет и пустые строки удаляет.</p><p>Подскажите, пожалуйста, что делаю неправильно?<br />Заранее спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (AdBes)]]></author>
			<pubDate>Thu, 06 Feb 2014 13:58:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=79816#p79816</guid>
		</item>
	</channel>
</rss>
