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

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

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

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

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

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

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

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

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

К сожалению, “звёздочкой” нельзя указать, что отсечь надо часть строки после указанного выражения. Эта задача решается в два этапа:

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

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

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

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

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

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

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

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

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

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

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

Как получить часть строки в windows cmd

Вопрос:

Я пытаюсь получить часть строки из файла и записать ее в переменную с помощью win CMD, но файл имеет несколько строк, и мне нужна только часть третьей строки. Например, файл “myfile.txt” содержит следующие строки:

package:com.test0.android
package:com.test1.android
package:com.test2.android
package:com.test3.android

И мне нужно написать только “com.test2.android” в переменную, но я не могу найти решение, как это сделать. Может ли кто-нибудь помочь мне, пожалуйста?

:/>  Как изменить шрифт на телефоне. Собрали все способы

Лучший ответ:

Ответ №1

Не уверен, что это то, что вы ищете. Но попробуйте

set str=package:com.test0.android
set str=%str:package:=%

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

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

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

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

Работа с наборами “ключ – значение”

Здесь, в общем-то, тоже никакой магии нет. В основе разбора лежит всё та же рассмотренная выше замена подстроки на пустое значение.

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

Урок 9 по cmd – цикл for, обработка текстовых строк |

В этой статье мы рассмотри как используется цикл командной строки for для обработки текстовых строк и файлов. Тут будет фигурировать ключ /f, который меняет логику работы цикла командной строи (cmd) for и позволяет производить разбор любого текста по полочкам, так сказать.

cmd for

Давайте начнем…

Для обработки текста или содержимого текстового файла применяется следующая конструкция:

for /f [“параметры”] %%переменная in (источник) do (оператор)

Тут “параметры” задают параметры поиска, мы их рассмотрим ниже, “источник” – тут нужно указать или путь к текстовому файлу, или текст, или вывод команд, “оператор” – тут собственно, находятся команды для обработки текста. Сам текст можно хранить в переменной, имя которой мы зададим в качестве источника.

Значение “параметры” может быть одним или комбинацией таких параметров:

eol – позволяет задать признак концевого комментария (end-of-line comment character). Весь текст, что будет находиться после него, будет приниматься за комментарий, например,“eol=#” – тут символ # является признаком концевого комментария. Собственно, комментарий не будет обрабатываться.

skip – позволяет в цикле cmd for задать количество строк, которые нужно пропустить, счет идет с начала файла, например, “skip=10” – в данном случае будут пропущены строки от первой до десятой.

:/>  Серые сектора в victoria

delims – параметр позволяет задать дополнительные разделители строки на подстроки. Так, стандартными разделителями является пробел и символ табуляции. Например, “delims=,.:” – тут мы определили, что запятые, точки и двоеточия являют­ся разделителями.

tokens  – данный параметр командной стоки цикла for cmd позволяет указать, какие номера полей строки, полученных из заданного текста, нужно передать для обработки в цикл. Полученные поля будут храниться в отдельной переменной. Фактически, если принимать каждое слово строки как отдельный элемент, то параметр tokens позволяет указать, какие именно слова по счету нужно обработать. Как упоминалось выше, стандартным разделителем является пробел и табуляция.

Для дополнительной переменной, как и для переменной инициализации, в качестве имени указывается латинская буква, большая или маленькая. Значения можно указывать как через запятые, например, “tokens=1,4, 9” – первый, четвертый и девятый элемент, так и через диапазон, например, “tokens=4-11” – с четвертого по одиннадцатый. Можно комбинировать: “tokens=4-10,15,20” – с четвертого по десятый, а также, пятнадцатый и двадцатый элемент. Если мы укажем в качестве последнего значения звездочку, то создастся еще одна переменная, которая будет хранить в себе все остальные элементы (строки) текста.

usebackq – данный параметр является довольно интересным и полезным, так как позволяет выполнять команды, передав их как параметр. Включив этот параметр, двойные кавычки будут применяться для имен файлов и пути к ним, обратные кавычки (`), они находятся на той же кнопке, что и символ (~) – для исполняемых команд, а одинарные кавычки – для литеральных строк.

Хорошо, теперь можно рассмотреть цикл cmd for и работу с ним на практике.

Допустим, у нас есть файл test.txt, в котором прописаны такие строки:

:/>  Как Сделать "Diff -R" Unix В Windows Cmd Prompt?

100 200 300
#это комментарий
400 500 600
10; 20; 30;

Попробуем выполнить такой код:

На выходе функция echo выведет:

100
400
10;

Как видим, строка с комментарием не вывелась, но и остальные строки вывелись не полностью, что бы это исправить, напишем так:

Бинго, теперь нам вывело все строки полностью, кроме строки с комментариями, так как мы указали в параметре tokens значение *, то есть все. В предыдущем примере сценарий принимал пробелы как разделители.

Теперь запишем в текстовый файл такой текст:

Ukraina-Kijev-grivna-salo
Rossija-Moskva-rubl-bliny
Belorussija-Minsk-zajec-kartoska
Chechija-Praga-krona-pivo

Тут мы указали, что разделителем является тире, и указали, что надо обработать первые четыре поля строки, каждое из которых хранится в отдельной переменной. Как видим, в цикле for cmd идет обработка каждой строки из текста, на выходе мы получим:

Strana:Ukraina Stolica:Kijev Valuta:grivna Produkt:salo

Strana:Rossija Stolica:Moskva Valuta:rubl Produkt:bliny

Strana:Belorussija Stolica:Minsk Valuta:zajec Produkt:kartoska

Strana:Chechija Stolica:Praga Valuta:krona Produkt:pivo

Я специально вставил между строк пустую (echo.) что бы было лучше видеть.

Осталось рассмотреть пример с параметром usebackq:

В данном случаем мы выполняем команду: записываем фразу “Hello, Wold” в текстовый файл, путь к которому содержится в переменной get_dir. В конце выводим содержимое файла и удаляем переменную.

Знаю, знаю, мало примеров, ничего, я исправлюсь…

Спасибо за внимание. Автор блога

Оставьте комментарий