<?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>http://forum.script-coding.com/viewtopic.php?id=7937</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=7937&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «CMD/BAT: смена регистра строки текста».]]></description>
		<lastBuildDate>Sat, 26 Oct 2013 14:43:32 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: CMD/BAT: смена регистра строки текста]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=76491#p76491</link>
			<description><![CDATA[<p>Пожалуй, это лучший вариант для преобразования регистров символов:</p><div class="codebox"><pre><code>:upperCase
:: Преобразование текстовой строки к верхнему регистру
:: %1 - исходная строка
:: %2 - переменная для записи результата
  setlocal
  set strTemp=%~1
  for %%a in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я) do set strTemp=!strTemp:%%a=%%a!
  endlocal &amp; set %~2=%strTemp%
exit /b 0

:lowerCase
:: Преобразование текстовой строки к нижнему регистру
:: %1 - исходная строка
:: %2 - переменная для записи результата
  setlocal
  set strTemp=%~1
  for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я) do set strTemp=!strTemp:%%a=%%a!
  endlocal &amp; set %~2=%strTemp%
exit /b 0</code></pre></div><p>Пример в аттаче.</p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Sat, 26 Oct 2013 14:43:32 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=76491#p76491</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: смена регистра строки текста]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=76222#p76222</link>
			<description><![CDATA[<div class="quotebox"><cite>urahangka пишет:</cite><blockquote><p>Кстати, а такой вариант чем плох?<br />кодировка ДОС (866)</p></blockquote></div><p>Хороший вариант. Предлагаю его немного упростить:</p><div class="codebox"><pre><code>@echo off
setlocal enabledelayedexpansion
set str=мама мыла раму, hello World
for %%a in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я) do set str=!str:%%a=%%a!
echo %str%
pause</code></pre></div><p>Это просто пример, без функции.</p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Sun, 20 Oct 2013 20:28:02 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=76222#p76222</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: смена регистра строки текста]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=72354#p72354</link>
			<description><![CDATA[<p>если уж нужна отложенная обработка<br /></p><div class="codebox"><pre><code>@ echo off
set &quot;strText=*** Hello, World! ***&quot;
set &quot;strText=%strText:!=?%
setlocal enabledelayedexpansion
echo %strText%
call :UpperCase &quot;!strText!&quot; &quot;strText&quot;
endlocal &amp; set out=UpperCase: %UpperCase:?=!%
echo %out%

pause
exit /b 0

:UpperCase
:: Преобразование текстовой строки к верхнему регистру
:: %1 - исходная строка
:: %2 - переменная для записи результата
setlocal
set out=%~0
set strTempString=%~1
for /f &quot;tokens=2* delims=:&quot; %%a in (&#039;find &quot;&quot; &quot;:%~1\&quot; 2^&gt;^&amp;1&#039;) do set strTempString=%%b
endlocal &amp; set %out:~1%=%strTempString:~0,-1%
exit /b 0</code></pre></div><p>знак вопроса это альт+12</p><p>да, автор идея интересная, как говорят &quot;пеши исчо!&quot; )</p>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Wed, 22 May 2013 18:07:21 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=72354#p72354</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: смена регистра строки текста]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=71014#p71014</link>
			<description><![CDATA[<p>Кстати, а такой вариант чем плох?<br />кодировка ДОС (866)<br /></p><div class="codebox"><pre><code>
@echo off
set str=мама мыла раму!
echo %str%
call :toUpper str
echo %str%
pause
exit /b

:toUpper str -- преобразование нижнего регистра к верхнему
if not defined %~1 EXIT /b
for %%a in (&quot;a=A&quot; &quot;b=B&quot; &quot;c=C&quot; &quot;d=D&quot; &quot;e=E&quot; &quot;f=F&quot; &quot;g=G&quot; &quot;h=H&quot; &quot;i=I&quot;
            &quot;j=J&quot; &quot;k=K&quot; &quot;l=L&quot; &quot;m=M&quot; &quot;n=N&quot; &quot;o=O&quot; &quot;p=P&quot; &quot;q=Q&quot; &quot;r=R&quot;
            &quot;s=S&quot; &quot;t=T&quot; &quot;u=U&quot; &quot;v=V&quot; &quot;w=W&quot; &quot;x=X&quot; &quot;y=Y&quot; &quot;z=Z&quot; &quot;?=?&quot;
            &quot;?=?&quot; &quot;?=?&quot; &quot;а=А&quot; &quot;б=Б&quot; &quot;в=В&quot; &quot;г=Г&quot; &quot;д=Д&quot; &quot;е=Е&quot; &quot;ё=Ё&quot; 
            &quot;ж=Ж&quot; &quot;з=З&quot; &quot;и=И&quot; &quot;й=Й&quot; &quot;к=К&quot; &quot;л=Л&quot; &quot;м=М&quot; &quot;н=Н&quot; &quot;о=О&quot;
            &quot;п=П&quot; &quot;р=Р&quot; &quot;с=С&quot; &quot;т=Т&quot; &quot;у=У&quot; &quot;ф=Ф&quot; &quot;х=Х&quot; &quot;ц=Ц&quot; &quot;ч=Ч&quot;
            &quot;ш=Ш&quot; &quot;щ=Щ&quot; &quot;ъ=Ъ&quot; &quot;ы=Ы&quot; &quot;ь=Ь&quot; &quot;э=Э&quot; &quot;ю=Ю&quot; &quot;я=Я&quot; ) do (
    call set %~1=%%%~1:%%~a%%
)
EXIT /b
</code></pre></div><p>Соответственно, преобразование верхнего к нижнему по аналогии.</p><p>Прикрепил файл, так как не все символы читабельны</p>]]></description>
			<author><![CDATA[null@example.com (urahangka)]]></author>
			<pubDate>Tue, 02 Apr 2013 12:36:28 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=71014#p71014</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: смена регистра строки текста]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68196#p68196</link>
			<description><![CDATA[<p><a href="http://forum.script-coding.com/viewtopic.php?pid=68195#p68195">Добавил</a>.</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Sun, 06 Jan 2013 07:45:13 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68196#p68196</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: смена регистра строки текста]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68170#p68170</link>
			<description><![CDATA[<div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>С другой стороны, может быть, она могла бы как-то облегчить борьбу с управляющими знаками вроде <strong>&amp;&gt;&lt;</strong>… в преобразуемой строке, если всё-таки использовать вспомогательный временный файл и читать его не через FOR/F, а через SET/P?</p></blockquote></div><p>Лучше не прогонять данные через файлы. Задача преобразовать строку текста к верхнему регистру, ради этого использовать механику жесткого диска кажется избыточным.</p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Sat, 05 Jan 2013 11:13:34 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68170#p68170</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: смена регистра строки текста]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68164#p68164</link>
			<description><![CDATA[<div class="quotebox"><cite>Arigato пишет:</cite><blockquote><p>Тогда пока остановимся на таком варианте:</p></blockquote></div><p>Похоже, что можно было бы ограничится лишь косой чертой,<br />но, впрочем, двоеточие не мешает, т.к. упрощает разбор вывода на части.</p><p>Вопрос о восклицательном знаке — <a href="http://forum.script-coding.com/post.php?tid=5141#topic-review">отдельная тема </a>, так что можно в неё здесь не углубляться.<br />Впрочем, она снимается, если убрать ENABLEDELAYEDEXPANSION после SETLOCAL, т.к. отложенная подстановка в этом примере всё равно не применяется.<br />(С другой стороны, может быть, она могла бы как-то облегчить борьбу с управляющими знаками вроде <strong>&amp;&gt;&lt;</strong>… в преобразуемой строке, если всё-таки использовать вспомогательный временный файл и читать его не через FOR/F, а через SET/P?)</p><p>Если не будет каких-либо замечаний и предложений, то завтра-послезавтра добавлю в Коллекцию в текущем виде (без ENABLEDELAYEDEXPANSION).</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Sat, 05 Jan 2013 09:07:31 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68164#p68164</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: смена регистра строки текста]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68118#p68118</link>
			<description><![CDATA[<p>На первый взгляд работает. Т.е. все проблемы, только если символы маски появляются в имени файла, в пути они к проблемам вроде не приводят.</p><p>Тогда пока остановимся на таком варианте:</p><div class="codebox"><pre><code>@ echo off
setlocal enabledelayedexpansion

set strText=*** Hello: World? ***
echo %strText%
call :UpperCase &quot;%strText%&quot; &quot;strText&quot;
echo UpperCase: %strText%

pause
exit /b 0

:UpperCase
:: Преобразование текстовой строки к верхнему регистру
:: %1 - исходная строка
:: %2 - переменная для записи результата
setlocal
set strTempString=%~1
for /f &quot;tokens=2* delims=:&quot; %%a in (&#039;find &quot;&quot; &quot;:%~1\&quot; 2^&gt;^&amp;1&#039;) do set strTempString=%%b
endlocal &amp; set %~2=%strTempString:~0,-1%
exit /b 0</code></pre></div><p>Восклицательный знак вообще не понятно, как вывести из переменной.<br />Так выводит:</p><div class="codebox"><pre><code>echo Hello, World^^!</code></pre></div><p>А так нет:</p><div class="codebox"><pre><code>set str=Hello, World^^!
echo %str%</code></pre></div><p>Единственное, как удалось его вывести:</p><div class="codebox"><pre><code>set str=Hello, World^^^^^^^^^^!
echo %str%</code></pre></div><p>Надо бы осмыслить эту конструкцию <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Меньшее количество крышечек не помогает. Однако если прогнать такую строку через :UpperCase, то восклицательный знак исчезнет.</p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Tue, 01 Jan 2013 19:55:30 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68118#p68118</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: смена регистра строки текста]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68111#p68111</link>
			<description><![CDATA[<p>А если так (при желании перед «:» можно добавить «*», а после «\» — «nul», «.» или, в принципе, что угодно):<br /></p><div class="codebox"><pre><code>for /f &quot;tokens=2* delims=:&quot; %%a in (&#039;find &quot;&quot; &quot;:%~1\&quot; 2^&gt;^&amp;1&#039;) do set strTempString=%%b
endlocal &amp; set %~2=%strTempString:~0,-1%</code></pre></div><p> ?</p><p><span style="color: gray">(ENABLEDELAYEDEXPANSION пока не используется, а восклицательные знаки съедает.)</span></p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Tue, 01 Jan 2013 15:47:25 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68111#p68111</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: смена регистра строки текста]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68110#p68110</link>
			<description><![CDATA[<p>Нашел еще одну проблему: появляется пробел в начале строки. Эта проблема успешно решена.<br />Проблема с двоеточием решена таким образом: заменяем все двоеточия в исходной строке на непечатный символ (я меняю его на BEEP), после FIND делаем обратную замену: этот символ на двоеточие. Пока проблем не нашел, тестируем дальше.</p><p>Код:</p><div class="codebox"><pre><code>@ echo off
setlocal enabledelayedexpansion

set strText=*** Hello: World? ***
echo %strText%
call :UpperCase &quot;%strText%&quot; &quot;strText&quot;
echo UpperCase: %strText%

pause
exit /b 0

:UpperCase
:: Преобразование текстовой строки к верхнему регистру
:: %1 - исходная строка
:: %2 - переменная для записи результата
setlocal
set strTempString=%~1
set strTempString=%strTempString::=%
for /f &quot;tokens=1,2* delims=:&quot; %%a in (&#039;find &quot;&quot; &quot;%strTempString%:.&quot; 2^&gt;^&amp;1&#039;) do set strTempString=%%b
set strTempString=%strTempString:=:%
endlocal &amp; set %~2=%strTempString:~1%
exit /b 0</code></pre></div><p>P.S. Учитывая наличие непечатных символов в коде, качаем код из аттача, т.к. на форуме эти символы исчезли.</p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Tue, 01 Jan 2013 15:06:55 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68110#p68110</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: смена регистра строки текста]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68109#p68109</link>
			<description><![CDATA[<p>Можно использовать точку. Точка всегда существует на диске, но команда FIND на нее ругается: &quot;Нет доступа: C:\.&quot; Так что она тоже подойдет.<br />На счет двоеточий в строке, верное замечание. И так, переделанный вариант:</p><div class="codebox"><pre><code>@ echo off
setlocal enabledelayedexpansion

set strText=Hello, World?
echo %strText%
call :UpperCase &quot;%strText%&quot; &quot;strText&quot;
echo UpperCase: %strText%

pause
exit /b 0

:UpperCase
:: Преобразование текстовой строки к верхнему регистру
:: %1 - исходная строка
:: %2 - переменная для записи результата
setlocal
for /f &quot;tokens=1* delims=:&quot; %%a in (&#039;find &quot;&quot; &quot;%~1:.&quot; 2^&gt;^&amp;1&#039;) do set strTempString=%%b
endlocal &amp; set %~2=%strTempString:~0,-2%
exit /b 0</code></pre></div><p>P.S. Если встречается двоеточие, то все равно результат неверный. Например, для &quot;Hello: World&quot; теперь работает правильно, но &quot;Hello: World?&quot; неверно, т.к. вернулись к исходной проблеме, когда символы маски в имени файла. Надо еще думать над проблемой...</p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Tue, 01 Jan 2013 14:44:30 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68109#p68109</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: смена регистра строки текста]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68108#p68108</link>
			<description><![CDATA[<div class="quotebox"><cite>Arigato пишет:</cite><blockquote><p>Чисто теоретически код не сработает, если подставить строку, скажем, &quot;C&quot;, при этом на диске &quot;C:&quot; будет файл &quot;~~~&quot; в корне</p></blockquote></div><p>Вместо «~~~» можно использовать «NUL» или даже «.».<br /></p><div class="quotebox"><cite>Arigato пишет:</cite><blockquote><p>P.S. Как ни странно, проблема быстро решилась</p></blockquote></div><p>А если в строке будет двоеточие? По-моему, будет потеряно всё что идёт за ним (вероятно, надо использовать TOKENS=1* и отбрасывать n последних символов <em>strTempString</em>).</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Tue, 01 Jan 2013 13:44:25 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68108#p68108</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: смена регистра строки текста]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68105#p68105</link>
			<description><![CDATA[<p>Что-то не догадался, что надо экранировать символы под for.</p><p>Подводные камни имеются, не любая строка будет корректно обработана. Т.к. там строка воспринимается как имя файла, то, почему-то, код зависает, если в строке есть символы * или ?, которые являются масками (но это после двоеточия, которое воспринимается как имя диска).</p><p>P.S. Как ни странно, проблема быстро решилась <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><div class="codebox"><pre><code>@ echo off
setlocal enabledelayedexpansion

set strText=Hello, World?
echo %strText%
call :UpperCase &quot;%strText%&quot; &quot;strText&quot;
echo UpperCase: %strText%

pause
exit /b 0

:UpperCase
:: Преобразование текстовой строки к верхнему регистру
:: %1 - исходная строка
:: %2 - переменная для записи результата
setlocal
for /f &quot;tokens=1,2* delims=:&quot; %%a in (&#039;find &quot;&quot; &quot;%~1:~~~&quot; 2^&gt;^&amp;1&#039;) do set strTempString=%%b
endlocal &amp; set %~2=%strTempString%
exit /b 0</code></pre></div><p>Пока других подводных камней не обнаружил.</p><p>Чисто теоретически код не сработает, если подставить строку, скажем, &quot;C&quot;, при этом на диске &quot;C:&quot; будет файл &quot;~~~&quot; в корне <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Tue, 01 Jan 2013 13:00:41 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68105#p68105</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: смена регистра строки текста]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68100#p68100</link>
			<description><![CDATA[<p>Интересное, неожиданное решение. Хотя и несколько (не знаю, как правильно сказать) «нерегулярное» — не уверен, что можно ожидать его стабильную работу во всех версиях FIND.EXE. Но, думаю, Коллекцию этим решением можно будет дополнить…<br /></p><div class="quotebox"><cite>Arigato пишет:</cite><blockquote><p>Недостаток метода: данные прогоняются через временный файл. Интересно, можно ли от этого избавиться?</p></blockquote></div><div class="codebox"><pre><code>for /f &quot;tokens=1,2* delims=:&quot; %%a in (&#039;find &quot;&quot; &quot;*:%~1&quot; 2^&gt;^&amp;1&#039;) do set strTempString=%%c</code></pre></div><p>— но проверьте, нет ли в этом каких-либо подводных камней.</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Tue, 01 Jan 2013 11:25:04 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68100#p68100</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: смена регистра строки текста]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=68095#p68095</link>
			<description><![CDATA[<p>В обсуждение этой темы: <a href="http://forum.script-coding.com/viewtopic.php?id=3375">http://forum.script-coding.com/viewtopic.php?id=3375</a></p><p>Предлагаю альтернативный способ преобразования строки к верхнему регистру:</p><div class="codebox"><pre><code>@ echo off
setlocal enabledelayedexpansion

set strText=Hello, World
echo %strText%
call :UpperCase &quot;%strText%&quot; &quot;strText&quot;
echo UpperCase: %strText%

pause
exit /b 0

:UpperCase
:: Преобразование текстовой строки к верхнему регистру
:: %1 - исходная строка
:: %2 - переменная для записи результата
setlocal
set tempFile=temp.~txt
find &quot;&quot; &quot;*:%~1&quot; 2&gt;%tempFile%
for /f &quot;tokens=1,2* delims=:&quot; %%a in (%tempFile%) do set strTempString=%%c
del /q %tempFile%
endlocal &amp; set %~2=%strTempString%
exit /b 0</code></pre></div><p><strong>Преимущество метода</strong>: существенно меньше кода.<br /><strong>Недостаток метода</strong>: данные прогоняются через временный файл. Интересно, можно ли от этого избавиться?</p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Tue, 01 Jan 2013 04:34:11 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=68095#p68095</guid>
		</item>
	</channel>
</rss>
