Вы находитесь на странице: 1из 1

Winreview Главная Winaero Tweaker Windows 11 Windows 10 Смена раскладки О сайте 

Сайт о Windows

Работа со строками в командных СОЦИАЛЬНЫЕ СЕТИ

файлах Windows 7 Winrevew в Telegram


Winreview в Twitter

Сергей Ткаченко

30 декабря 2011

Windows 7 Поиск… 
Позавчера мне пришлось написать простенький
Ключи командной строки,
Командная строка
командный файл, бекапящий профиль
приложения. В качестве имени папки с резервной
копией мне возжелалось использовать
ИЗБРАННОЕ
переменные окружения %date% и %time%. Если
вы проходили в институте начальный курс Winaero Tweaker — моя всё-в-одном
утилита
информатики, вы должны знать, что %time% в этом случае является
Как разблокировать сразу все файлы в
ничем иным, как граблями, остро торчащими на пути, так значение папке Загрузки в Windows 10
содержит недопустимый символ ":". Я никогда не занимался разбором Команды ms-settings Windows 11
Контекстное меню Изменить владельца
строк в командных файлах, и случай как нельзя лучше подходил для
для файлов и папок в Windows 10
того, чтобы прокачать свои скилы. Редактор реестра для новичка и не
только

Я хочу поделиться с вами своими изысканиями, и анонсирую скучную,


унылую техническую статью. Дочитавшему до конца - покажу котика.

РУБРИКИ

Linux
В современных ОС интерпретатор командной строки позволяет
Microsoft Office
выполнять простейшие строковые операции: Skype

Замену подстроки в строке Windows


Microsoft Store
Поиск подстроки
Windows 10
Выделение подстроки Windows 11
Работа с наборами "ключ - значение" Windows 7
Windows 8
Windows 8.1
Wordpress
Содержание [ скрыть ] Браузеры

Замена символов/подстроки в переменной командной строки Firefox


Google Chrome
Удалить все пробелы из значения переменной
Internet Explorer
Замена какой-либо части строки Microsoft Edge
Поиск подстроки Opera
Программы
Выделение подстроки из переменной
Разное
Выделение подстроки с начиная определенной позиции Смена раскладки
Выделение части строки, например, "середины"
Выделение определенного количества символов
Работа с наборами "ключ - значение"

РЕКЛАМА
Замена символов/подстроки в
переменной командной строки

Это то, что мне было нужно в первую очередь. Напомню, моя задача в
первую очередь избавиться от двоеточий.

Решается очень просто:

[code]set mytime=%time::=_%[/code]

В этом примере используется синтаксис вида:

[code]%Переменная:ЧтоНайти=НаЧтоЗаменить%[/code]

В моем случае заменяется двоеточие на символ нижнего


подчеркивания, и результат выглядит так:

Само собой, можно заменять не отдельные символы, а целые


словосочетания:

Как ещё можно воспользоваться функцией замены? Например:

Удалить все пробелы из значения


переменной

[code]echo %var: =%[/code]

Замена какой-либо части строки

Вы можете использовать символ "*" для определения того, что


обработке подлежит часть строки, предшествующая указанному
выражением. Я не знаю, как написать это по-человечески, вот что я
имею ввиду:

К сожалению, "звёздочкой" нельзя указать, что отсечь надо часть


строки после указанного выражения. Эта задача решается в два этапа:

1. в отдельную переменную помещается строка, из которой удалено всё,


что находится до ключевого выражения. Т.е. в ней остается "хвост",
искомое выражение плюс всё, что после него.
2. затем из оригинальной переменной удаляется значение переменной,
полученной на первом шаге. Здесь потребуется вызов команды СALL:

Инструкция CALL необходима для разворачивания значения


переменной, подлежащей замене. Без неё интерпретатор отработает
неверно, и вот эта конструкция не сработает:

[code]echo %var1:%var%=%[/code]

Необходимо писать:

[code]call echo %var1:%var%=%[/code]

Не забывайте, что при использовании таких конструкций в командных


файлах знаки процентов должны быть удвоены:

[code]rem Работаем внутри командного файла

call echo %%var1:%var%=%%[/code]

Поиск подстроки

Используя опыт, полученный выше, можно написать простейшую


проверку вида "содержит/не содержит".

Например, вот так:

[code]set var1=Мама мыла раму


set var2=%var1:Мама=%

if NOT "%var1%" == "%var2%" (echo Подстрока найдена)[/code]

Или

[code]set var1=Мама мыла раму


set var2=%var1:Мама=%

if NOT "%var1%" == "%var2%" (echo Подстрока найдена) else (echo


Подстрока не найдена) [/code]

Выделение подстроки из
переменной

Для получения подстроки из строки командный интерпретатор


предоставляет такую конструкцию:

[code]set var2=%var1:~начальная_позиция%
set var2=%var1:~начальная_позиция,-
отбросить_символов_с_конца_строки%
set var2=%var1:~начальная_позиция,длина%[/code]

Синтаксис очень простой, поэтому сразу перейдем к примерам.

Выделение подстроки с начиная


определенной позиции

Выделение части строки, например,


"середины"

Выделение определенного количества


символов

Начальная позиции строки - нулевая.

Работа с наборами "ключ -


значение"

Здесь, в общем-то, тоже никакой магии нет. В основе разбора лежит


всё та же рассмотренная выше замена подстроки на пустое значение.

Алгоритм действий такой:

Создается переменная, содежащая в себе значения вида <ключ>


<разделитель значения><значение><разделитель пары>. Назовем её
условно "словарь".
В переменную, которая будет содержать значение, записывается всё,
что следует после ключа. По аналоги с заменой части строки, нужно
использовать звездочку перед выражением <ключ><разделитель
значения>.
Полученный результат нужно "почистить", так как он может
содержать в себе остаток словаря. Для этого прибегнем к хитрости и
выполним составную команду.
Предположим, мы в качестве разделителя пары словаря используем
точку с запятой. Тогда мы сможем довольно изящно "убить"
оставшуюся часть словаря, поместив его в комментарии командой rem.
[code]set value=%value:;=&rem %[/code]
После rem - пробел, это важно(rem /?)

Теперь практический пример:

Я надеюсь, эта информация оказалась для вас полезной и сэкономит


вам время, если у вас появится задача обработки строк. Впрочем, тему
я раскрыл не полностью, и если у вас есть какие-то дельные личные
наработки и приёмы обработки строк в командном интерпретаторе
Windows, я совсем не против увидеть их в комментариях.

Материалы по теме:

http://ss64.com/nt/

Форум о скриптах на OSZone - рекомендую.

Спасибо, что дочитали до конца.

Узнавайте о новых статьях быстрее. Подпишитесь на наши каналы в


Telegram и Twitter.

Судя по тому, что вы читаете этот текст, вы дочитали эту статью до


конца. Если она вам понравилась, поделитесь, пожалуйста, с помощью
кнопок ниже. Спасибо за вашу поддержку!

Вы здесь: Главная страница » Windows » Windows 7 » Работа со строками в командных


файлах Windows 7

Публикации по теме

Как открыть командную строку от администратора в Windows 11


Как в Windows 11 заменить Терминал на Командную Строку
Как в Windows 11 открыть Терминал Windows
Как в Windows 11 открыть Командную строку
Как открыть Командную строку от Администратора в Windows 10
Как открыть Командную строку в Windows 10 — все способы
Как добавить Командную строку в меню Win + X в Windows 10
Масштабирование окна консоли в Windows 10 (cmd, WSL, PowerShell)
Ключи командной строки Skype
Как открыть очередь печати принтера из командой строки
Как убрать пустую строку из вывода команды echo в Windows
Что делать, если пропала прокрутка в командной строке cmd.exe после
смены шрифта
Как определить в командном файле, запущен ли он c правами
администратора
Обновление Ele 1.0.1 — утилиты для эскалации привилегий открытого
окна командой строки
Как заставить отображаться команду «Копировать как путь» в
контекстном меню Проводника Windows

Автор: Сергей Ткаченко


Сергей Ткаченко создал этот сайт в далёком 2009 году, и с тех пор продолжает над
ним работать, публикуя новые материалы о Windows и её приложениях практически
каждый день. Посмотреть все записи автора Сергей Ткаченко

Работа со строками в командных файлах Windows 7: 15


комментариев

Vadim Sterkin
31 декабря 2011 в 11:24

Полезные приемы, спасибо. Не совсем понял заключительную часть о наборах «ключ — значение».
С учетом того, что материал рассчитан на начинающих скриптовиков, можно было объяснить
назначение фичи получше. Пример это не слишком раскрывает…

Сергей Ткаченко 
31 декабря 2011 в 16:54

Теперь только в следующем году

rsuan
02 января 2012 в 08:31

Спасибо за статью!

Angel of Despair
02 января 2012 в 22:13

А все ведь из-за репаков NFS, да?

Сергей Ткаченко 
02 января 2012 в 22:13

Да.

Echinosor
03 января 2012 в 21:08

Вспоминается из башорга: «начальник заходит, а я увлеченно лопаю попкорн и смотрю в монитор.


он подходит, смотрит в моник, а там мануал по настройке анализатора логов для прокси»
(комментарий навеян котиками). А за статью — спасибо.

Nikita
05 января 2012 в 22:24

Спасибо за интересную статью. Только заключительная часть о наборах «ключ — значение» какая-
то неполная.

paulroot
14 декабря 2012 в 08:14

я прозрел…
еще бы была в винде команда замены в текстовом файле (типа команды поиска find findstr только
еще с заменой)
Спасибо за статью и особенно за котика, его я посмотрел в первую очередь!

Mopuapmu
05 ноября 2013 в 12:43

Воспользуйтесь gsar из GnuWin32:


gsar.exe -s»SomeString» -r»AnotherString» -o file.dat
https://ru.wikipedia.org/wiki/GnuWin32
http://gnuwin32.sourceforge.net

Сергей Ткаченко 
05 ноября 2013 в 19:06

Да в GnuWin32 чего только нет. Если уж рассматривать этот порт, можно воспользоваться
массой других утилит тоже.

Артем
03 марта 2014 в 08:27

Спасибо. Как раз то, что искал.

Антон
30 октября 2015 в 00:48

Очень познавательная статья. Спасибо.


Только, увы, и в ней нет информации как заменить/удалить в переменной символ звездочка (*)
Например хочу из Test*Test получить Test_Test
Конструкция
set a=Test*Test
set a=%a:*=_%
echo %a%
не работает
Также не работает конструкция
set a=Test*Test
call echo %a:*=_%

Может кто поможет в решении данного вопроса?

ччч
09 ноября 2015 в 16:34

Антон, юзай «раковину власти» (с) гугл-переводчик , там с переменными можно разные
непотребства сотворить средствами батника можно исключительно богоугодные процедуры
совершать.

Сергей Ткаченко 
10 ноября 2015 в 13:09

А если переведёт как Power Sink?


Писали бы PowerShell, хотя перевод да, отличный.

Антон
13 ноября 2015 в 17:25

Ха-ха, такого перевода еще не слышал, и действительно не понял о чем идет речь.
Но теперь так и придется изучать и использовать PowerShell, т.к. средствами
командного процессора такое решить не получается.
Спасибо за подсказки.

Обсуждение закрыто.

НАЗА Д

Explorer Toolbar Editor — редактор кнопок тулбара


Проводника

ДАЛЕЕ

Librarian 2.0 — обновление утилиты управления


библиотеками Windows

ПОЛЕЗНЫЕ ССЫЛКИ

Winaero

Winreview / Политика конфиденциальности / Авторские права и условия использования

Вам также может понравиться