<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; CMD/BAT: Замена одной строки на другую в txt файле]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7443&amp;type=atom" />
	<updated>2012-10-03T04:42:04Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=7443</id>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Замена одной строки на другую в txt файле]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=64500#p64500" />
			<content type="html"><![CDATA[<p>я немного не понял, а где тут путь к файлу ищется?<br />у меня ведь не на диске с:, а в локальной сети.</p>]]></content>
			<author>
				<name><![CDATA[bugagashi]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28295</uri>
			</author>
			<updated>2012-10-03T04:42:04Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=64500#p64500</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Замена одной строки на другую в txt файле]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=64488#p64488" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>MegaScrew пишет:</cite><blockquote><p><strong>Rumata</strong>, ваш пример работает, но если его подвести под указанную тут задачу то не работает.<br />Нерабочий код:</p><div class="codebox"><pre><code>@echo off

set XYZ=FA_ALERT=1
SET find=FA_ALERT=1
SET replace=FA_ALERT=0


echo %XYZ%

set XYZ=%XYZ:%find%=%replace%%

echo %XYZ%</code></pre></div><p>Так как после подстановки %find% cmd не смотрит дальше. Так это обойти что бы все заработало?</p></blockquote></div><p><strong>Можно! Например вот так:</strong></p><div class="codebox"><pre><code>@echo off

call :MaskEQ VAR &quot;==!==&quot;
echo.%VAR%
rem Now VAR contains string in HEX: 1E 1E 21 1E 1E

call :RestEQ VAR &quot;%VAR%&quot;
echo.%VAR%
rem Now VAR restored to: ==!==

exit /b

:MaskEQ
rem call :MaskEQ VAR &quot;%STR%&quot;
setlocal EnableExtensions
set STR=%~2
if not defined STR goto _exit_MaskEQ
rem mask ! char to 0x1d before EnableDelayedExpansion
set STR=%STR:!=1d%
set i=0
setlocal EnableDelayedExpansion
:_next_MaskEQ
set C=!STR:~%i%,1!
if not defined C goto _ret_MaskEQ
set C=%C:&quot;=%
set /a j=%i%+1
rem replace = char to pattern 0x1e
if &quot;%C%&quot;==&quot;=&quot; set STR=!STR:~0,%i%!1e!STR:~%j%!
set /a i=%i%+1
goto _next_MaskEQ
:_ret_MaskEQ
endlocal&amp;set STR=%STR%
rem restore ! char from 0x1d
set STR=%STR:1d=!%
:_exit_MaskEQ
endlocal&amp;set %1=%STR%
goto :EOF


:RestEQ
rem call :RestEQ VAR &quot;%STR%&quot;
setlocal EnableExtensions
set STR=%~2

rem restore = char from 0x1e
if defined STR set STR=%STR:1e==%
endlocal&amp;set %1=%STR%
goto :EOF</code></pre></div><p>P.S.<br />Вместо нечитабельных символов 0x1D и 0x1E можно задать любую уникальную строку<br />Всех благ!</p><p>там где&nbsp; &nbsp;style=&quot;color: #448888;&quot;&gt; это не мое это лишнее <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> ну кто знает поймет</p><p>Вот без подсветки синтаксиса:<br /></p><div class="codebox"><pre><code>@echo off

call :MaskEQ VAR &quot;==!==&quot;
echo.%VAR%
rem Now VAR contains string in HEX: 1E 1E 21 1E 1E

call :RestEQ VAR &quot;%VAR%&quot;
echo.%VAR%
rem Now VAR restored to: ==!==

exit /b

:MaskEQ
rem call :MaskEQ VAR &quot;%STR%&quot;
setlocal EnableExtensions
set STR=%~2
if not defined STR goto _exit_MaskEQ
rem mask ! char to 0x1d before EnableDelayedExpansion
set STR=%STR:!=1d%
set i=0
setlocal EnableDelayedExpansion
:_next_MaskEQ
set C=!STR:~%i%,1!
if not defined C goto _ret_MaskEQ
set C=%C:&quot;=%
set /a j=%i%+1
rem replace = char to pattern 0x1e
if &quot;%C%&quot;==&quot;=&quot; set STR=!STR:~0,%i%!1e!STR:~%j%!
set /a i=%i%+1
goto _next_MaskEQ
:_ret_MaskEQ
endlocal&amp;set STR=%STR%
rem restore ! char from 0x1d
set STR=%STR:1d=!%
:_exit_MaskEQ
endlocal&amp;set %1=%STR%
goto :EOF


:RestEQ
rem call :RestEQ VAR &quot;%STR%&quot;
setlocal EnableExtensions
set STR=%~2
if defined STR set STR=%STR:1e==%&amp;rem restore = char from 0x1e
endlocal&amp;set %1=%STR%
goto :EOF</code></pre></div>]]></content>
			<author>
				<name><![CDATA[digreesun]]></name>
			</author>
			<updated>2012-10-02T17:07:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=64488#p64488</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Замена одной строки на другую в txt файле]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=64466#p64466" />
			<content type="html"><![CDATA[<p>Я бы хотел добавить от себя вопрос.<br />Суть такая же.<br />Есть файл INF.DAT<br />В нём есть строка, начинающаяся на origin, после идёт <br />= значение.<br />Необходимо значение, какое оно бы не было, заменить на 0.<br />Файл находиться в сети, на одной и той же машине. например \\Andrey\prepare\<br />После prepare могут быть ещё папки. INF.DAT есть всегда и, внутри оного, origin = значение, тоже.</p>]]></content>
			<author>
				<name><![CDATA[bugagashi]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28295</uri>
			</author>
			<updated>2012-10-02T11:58:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=64466#p64466</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Замена одной строки на другую в txt файле]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=62666#p62666" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>MegaScrew пишет:</cite><blockquote><p>Так это обойти что бы все заработало?</p></blockquote></div><p>Скорее всего никак. </p><p>Лично я использую утилиты SED, AWK из комплекта <a href="http://unxutils.sourceforge.net/">UnixUtils</a> или PERL; или же пишу небольшой скрипт на JSCRIPT и внедряю его в BAT-файл, как это описано здесь - <a href="http://forum.script-coding.com/viewtopic.php?id=2886">bat+jscript: два в одном</a></p><p>Ваша задача очень легко решается в 1-2 строки с помощью SED/AWK/PERL и требует больших усилий в командной строке DOS.</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2012-08-10T11:37:21Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=62666#p62666</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Замена одной строки на другую в txt файле]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=62665#p62665" />
			<content type="html"><![CDATA[<p><strong>Rumata</strong>, ваш пример работает, но если его подвести под указанную тут задачу то не работает.<br />Нерабочий код:</p><div class="codebox"><pre><code>@echo off

set XYZ=FA_ALERT=1
SET find=FA_ALERT=1
SET replace=FA_ALERT=0


echo %XYZ%

set XYZ=%XYZ:%find%=%replace%%

echo %XYZ%</code></pre></div><p>Так как после подстановки %find% cmd не смотрит дальше. Так это обойти что бы все заработало?</p>]]></content>
			<author>
				<name><![CDATA[MegaScrew]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28387</uri>
			</author>
			<updated>2012-08-10T10:50:40Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=62665#p62665</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Замена одной строки на другую в txt файле]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=62663#p62663" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>MegaScrew пишет:</cite><blockquote><p>по второму вопросу про %PATH:str1=str2% ??</p></blockquote></div><div class="codebox"><pre><code>@echo off

set XYZ=VAR=VALUE

echo %XYZ%

set XYZ=%XYZ:VAR=KEY%

echo %XYZ%</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2012-08-10T08:27:11Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=62663#p62663</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Замена одной строки на другую в txt файле]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=62661#p62661" />
			<content type="html"><![CDATA[<p><strong>Rumata</strong> и <strong>alexii</strong>, спасибо за инфу.<br />так я тоже в FAR-e, собственно в нем и увидел лишние пробелы в итоговом файле.<br />А что скажете по второму вопросу про %PATH:str1=str2% ??</p>]]></content>
			<author>
				<name><![CDATA[MegaScrew]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28387</uri>
			</author>
			<updated>2012-08-10T07:33:53Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=62661#p62661</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Замена одной строки на другую в txt файле]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=62660#p62660" />
			<content type="html"><![CDATA[<p>И:<br /></p><div class="codebox"><pre><code>    IF !line!==%find% ( SET line=%replace% )</code></pre></div><p>на:<br /></p><div class="codebox"><pre><code>    IF !line!==%find% ( SET line=%replace%)</code></pre></div><p><img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />. Начинаю понимать, почему рекомендуют использовать такую форму:<br /></p><div class="codebox"><pre><code>set &quot;Var=Value&quot;</code></pre></div><p>Мне-то, в Far Manager&#039;е, все пробельные символы видны.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2012-08-10T07:18:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=62660#p62660</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Замена одной строки на другую в txt файле]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=62659#p62659" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>MegaScrew пишет:</cite><blockquote><p>Есть в нем недостаток, после прохода по файлу данный скрипт добавляет два лишних пробела в конец каждой строки.</p></blockquote></div><p>Замените<br /></p><div class="codebox"><pre><code>echo !line! &gt;&gt; %tfile%</code></pre></div><p>на <br /></p><div class="codebox"><pre><code>echo !line!&gt;&gt; %tfile%</code></pre></div><p>========<br />Вообще, лучше делать один централизованный вывод. Мне известны два способа:</p><p>1. группировка<br /></p><div class="codebox"><pre><code>(
    echo string
    echo another string
) &gt; filename</code></pre></div><p>2. вызов подпрограммы<br /></p><div class="codebox"><pre><code>call :sub &gt; filename

:: выход из скрипта
goto :EOF

:sub
echo string
echo another string

:: выход из подпрограммы
goto :EOF</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2012-08-10T07:04:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=62659#p62659</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Замена одной строки на другую в txt файле]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=62657#p62657" />
			<content type="html"><![CDATA[<p>это рабочий батник.&nbsp; <br />Запускать myfile.bat targetfile.txt<br /></p><div class="codebox"><pre><code>@ECHO OFF
setlocal enabledelayedexpansion
SET ifile=%1
SET tfile=%ifile%.tmp
SET find=FA_ALERT=1
SET replace=FA_ALERT=0
IF EXIST %tfile% DEL /Q %tfile%

FOR /F &quot;tokens=* delims=, &quot; %%a IN (%ifile%) DO ( 
    set line=%%a
    IF !line!==%find% ( SET line=%replace% )
    echo !line! &gt;&gt; %tfile%
)

MOVE /Y %tfile% %ifile%

EXIT /B 0</code></pre></div><p>PS:<br />Есть в нем недостаток, после прохода по файлу данный скрипт добавляет два лишних пробела в конец каждой строки. Следовательно обработать один и тот же файл дважды не получиться так как строка %finde% не будет совпадать со строкой у которой в конце пробелы. Кто знает как вылечить это?<br />PSS: более простой вариант был бы с использованием %PATH:str1=str2% только вот беда, если в str1 или str2 есть знак равно как в данном случае то все летит в чертям, кто знает как лечить?<br />Взять строку в кавычки не предлагать так как в рамках данной задачи это не вариант.</p>]]></content>
			<author>
				<name><![CDATA[MegaScrew]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28387</uri>
			</author>
			<updated>2012-08-10T06:28:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=62657#p62657</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Замена одной строки на другую в txt файле]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=62635#p62635" />
			<content type="html"><![CDATA[<p>это не батник, это эскиз</p>]]></content>
			<author>
				<name><![CDATA[smaharbA]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2911</uri>
			</author>
			<updated>2012-08-09T18:52:21Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=62635#p62635</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Замена одной строки на другую в txt файле]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=62609#p62609" />
			<content type="html"><![CDATA[<p>Большое спасибо, я так понял это то что будет происходить с самим файлом, а как указать что бы этот скрипт применялся к конкретному файлу (путь как указать?) Просто так попробовал включить такой батник, он несработал.</p>]]></content>
			<author>
				<name><![CDATA[Arg]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28503</uri>
			</author>
			<updated>2012-08-09T13:44:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=62609#p62609</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Замена одной строки на другую в txt файле]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=62589#p62589" />
			<content type="html"><![CDATA[<p>for %%x ... do (<br />for %%y in (%%x) do (<br />set z=%%y<br />if !z!==FA_ALERT=1 set !z!=FA_ALERT=0<br />set zz=!zz!!z!тутапробел<br />)<br />echo !zz!<br />)</p><p>как то так</p>]]></content>
			<author>
				<name><![CDATA[smaharbA]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2911</uri>
			</author>
			<updated>2012-08-09T11:34:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=62589#p62589</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[CMD/BAT: Замена одной строки на другую в txt файле]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=62569#p62569" />
			<content type="html"><![CDATA[<p>Здраствуйте, помогите пожалуйста написать батник, я неочень хорошо в них разбираюсь, но юзал поиск, находил несколько схожих тем, но разобраться все равно неполучилось.</p><p>Нужно, что бы при нажатии на батник в файле MYFILE.TXT, который состоит из не более чем 100 строк, строка FA_ALERT=1 заменялась на строку FA_ALERT=0, желательно что бы при этом ненужно было указывать номер этой строки.</p><p>Заранее спасибо всем откликнувшимся.</p>]]></content>
			<author>
				<name><![CDATA[Arg]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=28503</uri>
			</author>
			<updated>2012-08-09T08:15:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=62569#p62569</id>
		</entry>
</feed>
