<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; CMD: Экранирование восклицательного знака после enabledelayedexpansion]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=5141</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=5141&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «CMD: Экранирование восклицательного знака после enabledelayedexpansion».]]></description>
		<lastBuildDate>Wed, 10 Nov 2010 05:21:24 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: CMD: Экранирование восклицательного знака после enabledelayedexpansion]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=41425#p41425</link>
			<description><![CDATA[<p><strong>alexii</strong><br />Спасибо за ссылку, нашел там идею о переменной, которой прсвоен восклицательный знак.<br />Вот мой код: он удаляет старые бэкапы, исходя из заданного в скрипте количества(сами бекапы создаются сторонней программой). В моем случае имя файла представляло &quot;Copy date-time!.zip&quot;<br /></p><div class="codebox"><pre><code>@echo off
set n=0
set ex=!
setlocal enabledelayedexpansion
set LogFile=&quot;%~dp0\LogRotation.log&quot;


echo ============================================&gt;&gt;%LogFile%
echo %date% %time:~0,8%&gt;&gt;%LogFile%
echo ============================================&gt;&gt;%LogFile%

dir &quot;copy*.zip&quot; /b /tc /o-d&gt;&gt;%LogFile%
echo --------------------------------------------&gt;&gt;%LogFile%

for /f &quot;tokens=* usebackq&quot; %%i in (`dir &quot;copy*.zip&quot; /b /tc /o-d`) do (
    set /a n=!n! + 1
    if /i !n! GEQ 15 (
        echo Deleted &quot;%%i!!ex!.zip&quot;&gt;&gt;%LogFile%
        del /f &quot;%%i!!ex!.zip&quot;
    )
)
rem echo Done. See &quot;%LogFile%&quot; for more details.</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (md3k)]]></author>
			<pubDate>Wed, 10 Nov 2010 05:21:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=41425#p41425</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD: Экранирование восклицательного знака после enabledelayedexpansion]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=41392#p41392</link>
			<description><![CDATA[<p>Могу предложить следующий скрипт ротации файлов<br /></p><div class="codebox"><pre><code>@echo off

if    &quot;%~1&quot; == &quot;&quot;   goto help
if /i &quot;%~1&quot; == &quot;/h&quot; goto help

setlocal

if not &quot;%~2&quot; == &quot;&quot; set /a rotate_n=%~2 2&gt;nul
if not defined rotate_n set rotate_n=5
if %rotate_n% lss 5 set rotate_n=5

:: set rotate_c=copy /y
set rotate_0=copy nul
set rotate_c=move /y

set rotate_i=%rotate_n%

:loop_redo
set /a rotate_i-=1
if %rotate_i% == 0 goto loop_break

if exist &quot;%~1.%rotate_i%&quot; %rotate_c% &quot;%~1.%rotate_i%&quot; &quot;%~1.%rotate_n%&quot;

set /a rotate_n-=1
goto loop_redo
:loop_break

%rotate_c% &quot;%~1&quot; &quot;%~1.1&quot; &amp;&amp; %rotate_0% &quot;%~1&quot;

endlocal
goto :EOF

:help
echo.Usage:
echo.    %~n0 FILENAME [NUMBER]
goto :EOF</code></pre></div><p>Можно вызывать из другого скрипта. По умолчанию создает 5 файлов, добавляя очередную цифру к расширению. Второй (необязательный) параметр указывает размер очереди. <br /></p><div class="codebox"><pre><code>@echo off

:: Очередь равна 15 для каждого &quot;бекапируемого&quot; файла
for /f &quot;tokens=* usebackq&quot; %%i in (`dir &quot;a*.txt&quot; /b /tc /o-d`) do (
    call rotate &quot;%%~i&quot; 15
)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Tue, 09 Nov 2010 14:07:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=41392#p41392</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD: Экранирование восклицательного знака после enabledelayedexpansion]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=41390#p41390</link>
			<description><![CDATA[<p>Не уверен, что подойдёт, но попробуйте воспользоваться этим: <a href="http://rsdn.ru/article/winshell/NTCommandProcessor.xml#EW2AE">Оператор “!” или оператор “%”?</a>. Или не используйте <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> включение отложенного раскрытия переменных (раскрытие делать через вызов «call»). Либо, что будет более продуктивно, переходите на WSH/PoSH.</p><p>P.S. Насколько я помню, в «SET /A» использовать раскрытие (что «%», что «!») не требуется.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Tue, 09 Nov 2010 13:50:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=41390#p41390</guid>
		</item>
		<item>
			<title><![CDATA[CMD: Экранирование восклицательного знака после enabledelayedexpansion]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=41389#p41389</link>
			<description><![CDATA[<p>Всем привет, пишу скрипт для ротации бекапов. В имени присутсвует восклицательный знак, и от него никак не избавиться. Подскажите как можно экранировать его, иначе он пропадает и система не находит файл. Вот мой код<br /></p><div class="codebox"><pre><code>@echo off
set n=0
setlocal enabledelayedexpansion

for /f &quot;tokens=* usebackq&quot; %%i in (`dir &quot;copy*.zip&quot; /b /tc /o-d`) do (
    set /a n=!n! + 1
    echo !n!
    if /i !n! GEQ 15 (
        echo Deleted %%i
        del /f &quot;%%i&quot;
    )
)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (md3k)]]></author>
			<pubDate>Tue, 09 Nov 2010 13:10:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=41389#p41389</guid>
		</item>
	</channel>
</rss>
