Cmd замена символов в строке

Cmd замена символов в строке

Позавчера мне пришлось написать простенький командный файл, бекапящий профиль приложения. В качестве имени папки с резервной копией мне возжелалось использовать переменные окружения %date% и %time%. Если вы проходили в институте начальный курс информатики, вы должны знать, что %time% в этом случае является ничем иным, как граблями, остро торчащими на пути, так значение содержит недопустимый символ ":". Я никогда не занимался разбором строк в командных файлах, и случай как нельзя лучше подходил для того, чтобы прокачать свои скилы.

Я хочу поделиться с вами своими изысканиями, и анонсирую скучную, унылую техническую статью. Дочитавшему до конца — покажу котика.
В современных ОС интерпретатор командной строки позволяет выполнять простейшие строковые операции:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[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]

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

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

начальная_позиция%
set var2=%var1:

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

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

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

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

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

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

Работа с наборами "ключ — значение"

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

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

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

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

Читайте также:  Как отследить с кем переписывается вк человек

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

Здравствуйте. Сабж. Надо заменить 13ю строку в файле на заранее известную. Пишу так

for /f "skip=12" in (settings.ini) do (echo dparm=BIND=0,lck=’ru’,APP=’GPS’,HST=’%COMPUTERNAME%’)

По задумке должно пропустить 12 строк с начала файла и заменить на то, что указано в скобках. По факту — ноль реакции. Возможно, надо еще прервать цикл, т.к. замена производится один раз, но не уверен, это предположение, раньше с смд дел не имел.

  • Вопрос задан более трёх лет назад
  • 3825 просмотров

В общем, полазил еще по форумам и сделал. Изначально задача была заменить в файле кусок именем компьютера, на котором запущен файл. Но я намудрил, решил заменить целую строчку, поэтому долго возился. Все оказалось прозаичнее. В примере ниже pc-name — это кусок, подлежащий замене на имя компа, получаемое через %computername%.

@echo off
setlocal enabledelayedexpansion
Set infile=settings.ini
Set find=pc-name
Set replace=%COMPUTERNAME%
@echo off
setlocal enabledelayedexpansion
set COUNT=0
for /F "tokens=* delims=, eol=#" %%n in (!infile!) do (
set LINE=%%n
set TMPR=!LINE:%find%=%replace%!
Echo !TMPR!>>TMP.TXT
)
move TMP.TXT %infile%

Контент в 12-й строке известен?

Создать файл replace.ps1
в него поместить

и хоть закликайтесь 🙂

При первом запуске моматюкается на то что мол низя скрипты запускать, мир в опасносте, но на команду "Set-ExecutionPolicy remotesigned"(в PS консоли запущенной от админа), соглашается на то что не так всё плохо 🙂

Читайте также:  Сколько гигакалорий в 1 кубометре газа

У нас есть файл 1.txt и в нём такое содержание:

Цифровой клавиатурой называется совокупность близко расположенных клавиш с цифрами,
предназначенных для ввода чисел (например, номеров). Существует два различных варианта
расположения цифр на таких клавиатурах. В телефонах используется клавиатура, в которой числовые
значения клавиш возрастают слева направо и сверху вниз. Аналогичный тип клавиатуры используется
в домофонах и других средствах аудиосвязи (например, в программе Skype), а также на пультах
дистанционного управления (например, на пульте управления телевизором). ###

Необходимо последние три символа "###" заменить на "Автор Петрович."
Внимание! Есть пару условий! Проблема должна решаться только при помощи bat или cmd и никаких дополнительных программ, текст может быть любой, любого размера, любого кол-во строк букв символов и тд, но в конце всегда будут "###".

Ссылка на основную публикацию
360 Total security родительский контроль
Что, если мы расскажем, как защитить компьютер от онлайн угроз, сэкономив при этом на покупке дорогих лицензионных программ с громкими...
Adblock detector