С Новым годом! Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/347: Рейтинг темы: голосов - 347, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 16.04.2018
Сообщений: 11
1

Замена текста в файле

16.04.2018, 17:30. Показов 63228. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Народ, помогите с батником. Начал учиться писать .bat для себя. В итоге столкнулся с необходимостью bat на работе... Ну вот как написать нужный мне не могу понять... В инете есть похожие статьи, но не совсем то, что нужно мне.
Смысл батника таков:
Есть файл: К0000.*** (Первая часть К0000 остается неизменной, а вот .*** меняется).
Мне нужно сл.: чтоб он находил файл в директории, открывал его и заменял в тексте значения.

Допустим текст такой:

342342532532542542А03423523523523523
231434213413413421А1234232342А032423423423423

После обработки батником текст должен быть сл.

342342532532542542003423523523523523
231434213413413421002342323420032423423423423

т.е. среди множества цифр есть А1 и А0, он должен при совпадении А1 или А0 менять их на 00.

Второе условие, что он их должен менять только при полном совпадении, т.е. 123456789А9 - не подходит, 123456789А0 - подходит.

Просьба, Вы можете полностью описать процесс? Очень хотелось бы понять на примере, чтоб дальше писать самому.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.04.2018, 17:30
Ответы с готовыми решениями:

Поиск и замена текста в файле
Имеется, допустим, файлик в кодировке 1251: tyutuyt бухгалтера лросодло клиентов апорпвоыпоп...

[bat] замена текста в файле
добрый вечер. есть файл вида: #example.sln Microsoft Visual Studio Solution File, Format...

Замена текста в тхт файле
Добрый день! Помогите отредактировать файл. Есть текстовик c 100500 строками, нужно в каждой строке...

Замена текста в файле реестра
Такой вопрос. Как сделать батник, который будет изменять путь реестра, в который требуется сделать...

23
4336 / 2126 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
17.04.2018, 11:58 2
Лучший ответ Сообщение было отмечено Topirka как решение

Решение

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
<file.txt>tmp (for /f "delims=" %%a in ('more') do @<nul set /p="%%a"|>nul findstr /r /c:"A[01]" && (
  set "vs=%%a"& call :ps
 ) || (
  echo:%%a
 )
)& >nul move tmp file.txt
pause& exit
 
:ps
 @set "vs=%vs:A0=00%"
 @set "vs=%vs:A1=00%"
 @echo %vs%
exit /b
До:
Замена текста в файле

После:
Замена текста в файле
1
0 / 0 / 0
Регистрация: 16.04.2018
Сообщений: 11
17.04.2018, 13:42  [ТС] 3
Работает идеально)
А можно Вас попросить описать процесс? За что отвечает каждая из?

А как сделать, чтоб он перезаписывал файл? Чтоб не создавалось нового .txt документа?

Возможно чтоб он искал сам в этой папке файл допустим M1234.***? Есть есть файл M1234. то он сам его берет, там из-за расширения только номер меняется. М1234 не меняется.

Буду очень благодарен если полностью опишите процесс, чтоб понимать что и к чему.Так проще учиться. Большое Вам спасибо!
0
4336 / 2126 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
17.04.2018, 15:13 4
Цитата Сообщение от Topirka Посмотреть сообщение
чтоб он перезаписывал файл
это и происходит или я вас не понимаю.

Цитата Сообщение от Topirka Посмотреть сообщение
искал сам в этой папке файл M1234...
Windows Batch file
1
for /f "delims=" %%a in ('dir /a-d/b "Papka\M1234*"') do echo %%a
или
Windows Batch file
1
for /f "delims=" %%a in ('dir /a-d/b "Papka\*"^|find "M1234"') do echo %%a
Цитата Сообщение от Topirka Посмотреть сообщение
если полностью опишите процесс, чтоб понимать что и к чему
200% на то что после этого ничего не поймете, если бы так быстро все давалось все были бы программистами давно и форум был бы не нужен.
1
0 / 0 / 0
Регистрация: 16.04.2018
Сообщений: 11
17.04.2018, 16:29  [ТС] 5
Цитата Сообщение от alpap Посмотреть сообщение
это и происходит или я вас не понимаю.
нет, он создает новый файл file.txt и в него перезаписывает. Возможно ли чтоб он правил существующий файл? А то из за этого и время работы батника около минуты.

Цитата Сообщение от alpap Посмотреть сообщение
1
for /f "delims=" %%a in ('dir /a-d/b "Papka\M1234*"') do echo %%a
Видимо я совсем еще новичок, потому что не особо понимаю за место чего это вставить

Добавлено через 48 минут
Цитата Сообщение от alpap Посмотреть сообщение
1
for /f "delims=" %%a in ('dir /a-d/b "Papka\*"^|find "M1234"') do echo %%a
Все перепробовал, файлы находит, но не обрабатывает.. наверно что-то не туда вставляю...

Добавлено через 4 минуты
Цитата Сообщение от Topirka Посмотреть сообщение
это и происходит или я вас не понимаю.
Перезапись просто удобна тем, что в случае чего, он не перезатирает прошлый файл. Допустим отработал один файл, затем второй. В итоге 2 файла, а не 1.
0
4336 / 2126 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
17.04.2018, 16:47 6
Лучший ответ Сообщение было отмечено Topirka как решение

Решение

Цитата Сообщение от Topirka Посмотреть сообщение
не перезатирает прошлый файл
по другому bat не умеет

Цитата Сообщение от Topirka Посмотреть сообщение
наверно что-то не туда вставляю...
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@echo off
for /f "delims=" %%a in ('dir /a-d/b "Papka\M1234*"') do <"%%a">tmp (
 for /f "delims=" %%f in ('more') do @<nul set /p="%%f"|>nul findstr /r /c:"A[01]" && (
   set "vs=%%f"& call :ps
  ) || (
   echo:%%f
  )
 )
)
>nul move tmp file.txt
pause& exit
 
:ps
 @set "vs=%vs:A0=00%"
 @set "vs=%vs:A1=00%"
 @echo %vs%
exit /b
Добавлено через 2 минуты
подобные вещи на bat - извращение, как раз все выше это и демонстрирует.
1
0 / 0 / 0
Регистрация: 16.04.2018
Сообщений: 11
17.04.2018, 16:53  [ТС] 7
Цитата Сообщение от alpap Посмотреть сообщение
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
for /f "delims=" %%a in ('dir /a-d/b "Papka\M1234*"') do <"%%a">tmp (
*for /f "delims=" %%f in ('more') do @<nul set /p="%%f"|>nul findstr /r /c:"A[01]" && (
* *set "vs=%%f"& call :ps
* ) || (
* *echo:%%f
* )
*)
)
>nul move tmp file.txt
pause& exit
:ps
*@set "vs=%vs:A0=00%"
*@set "vs=%vs:A1=00%"
*@echo %vs%
exit /b
Не, просто в этом случае он правит непосредственно в самом фале....

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@echo off
setlocal enabledelayedexpansion
 
rem имя файла
Set infile= M12345.*
 
rem ищем это
Set find=A0
 
rem меняем на это
Set replace=00
 
@echo off
setlocal enabledelayedexpansion
set COUNT=0
for /F "tokens=* delims=," %%n in (!infile!) do (
set LINE=%%n
set TMPR=!LINE:%find%=%replace%!
Echo !TMPR!>>tmp.txt
)
move tmp.txt %infile%
pause
0
0 / 0 / 0
Регистрация: 19.07.2016
Сообщений: 3
20.07.2018, 20:58 8
Ребят, перерыл весь инет, в некоторых местах два раза, найти именно то что нужно не могу.

Задача такая - есть файл с примерно таким содержанием:
Код
<SUSR1>12131212</SUSR1>

<PRIORITY>3</PRIORITY>

<ROUTE>34_DN_ZPO</ROUTE>

<C_ADDRESS1>456544456446</C_ADDRESS1>

<C_ADDRESS2>788987789</C_ADDRESS2>

<C_ADDRESS3/>

<C_ADDRESS4/>
Мне нужно стереть "цифры" между суср и адресами (вместо цифр там всё что угодно - проблемы, верхние кавычки и прочеее), и сохранить файл.

Целая куча как найти один текст и подменить другим, но вот такое найти в упор не могу. Регулярными выражениями тоже не сообразил как. Подскажите кому сколько не жалко.

Спасибо.
0
419 / 179 / 27
Регистрация: 11.03.2018
Сообщений: 771
21.07.2018, 06:51 9
XMLStarlet- это известная утилита командной строки, которую можно использовать для
  • преобразования
  • запроса содержимого
  • проверки
  • редактирования
XML-документов.
( https://sourceforge.net/projects/xmlstar/files/ )
Установка проста, после распаковки добавить в PATH каталог, где находится xml.exe

сначала проверка на то, что твой обрабатываемый файл является правильным XML-файлом ( validation ).
Windows Batch file
1
xml val file.xml
Если всё в порядке,
производим удаление текста, относящегося к узлу SUSR1
Windows Batch file
1
xml ed -L -d "//SUSR1/text()"  file.xml
1
0 / 0 / 0
Регистрация: 19.07.2016
Сообщений: 3
21.07.2018, 08:56 10
Вариант рабочий, но боюсь в моём случае закрытый "узел" (/) и пустой (><) немного разные вещи. Попробую скормить программе этот вариант, но если не получится есть ли варианты именно с тупым вытиранием текста между тегов?

И раз уж такая пьянка - можно ли увидеть в батнике что он сделал? Вывести лог или как было\стало после его выполнения?
0
419 / 179 / 27
Регистрация: 11.03.2018
Сообщений: 771
21.07.2018, 09:30 11
Цитата Сообщение от cahbe Посмотреть сообщение
И раз уж такая пьянка - можно ли увидеть в батнике что он сделал?
Да, конечно, достаточно убрать ключ -L ( in-place editing ) и результат пойдёт в stdout, то есть, в консольное окно.

Цитата Сообщение от cahbe Посмотреть сообщение
Вариант рабочий, но боюсь в моём случае закрытый "узел" (/) и пустой (><) немного разные вещи.
Вообще-то это одно и то же, но ... Но вполне возможно, что можно заставить xmlstarlet с помощью настроек генерить пустой узел так, как тебе хочется.

Добавлено через 5 минут
Если оп.система Windows 7 и свежее, порекомендовал бы использовать powershell в качестве универсального инструмента для работы
с текстовыми файлами всех видов ( txt, rtf, csv, html, xml ... ).

Добавлено через 17 минут
Вместо ключа -d (удалить), можно использовать ключ -u(изменить) и тогда,
подсунув ключу -v пустые кавычки, получим желаемое: <SUSR1></SUSR1>
Windows Batch file
1
xml ed -u "//SUSR1/text()" -v ""  file.xml
2
2 / 2 / 0
Регистрация: 22.11.2017
Сообщений: 33
04.02.2020, 11:00 12
Цитата Сообщение от bidstrup Посмотреть сообщение
xml ed -u "//SUSR1/text()" -v ""  file.xml
Как я понял, это замена строки в файле file.xml. Но у меня почему то только в консоли показывает изменения, в файл почему то изменения не записываются. Может какой ключ дописать надо?
0
6302 / 2144 / 337
Регистрация: 10.12.2013
Сообщений: 7,387
04.02.2020, 13:05 13
Цитата Сообщение от bidstrup Посмотреть сообщение
Да, конечно, достаточно убрать ключ -L ( in-place editing ) и результат пойдёт в stdout, то есть, в консольное окно.
Соответственно, добавление ключа -L отредактирует файл по месту. ( xml ed -L -d "//SUSR1/text()" file.xml )
1
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 4
21.04.2021, 13:38 14
Прошу помочь. Имею файл, в котором средствами cmd нужно заменить строку (или часть сроки) на другую.

Скрипт указанный здесь справляется на отлично:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@echo off
setlocal enabledelayedexpansion
 
rem имя файла
Set infile= M12345.*
 
rem ищем это
Set find=A0
 
rem меняем на это
Set replace=00
 
@echo off
setlocal enabledelayedexpansion
set COUNT=0
for /F "tokens=* delims=," %%n in (!infile!) do (
set LINE=%%n
set TMPR=!LINE:%find%=%replace%!
Echo !TMPR!>>tmp.txt
)
move tmp.txt %infile%
pause
но он удаляет переносы строк из оригинального файла. Как переносы строк сохранить?
0
3161 / 1087 / 491
Регистрация: 29.05.2016
Сообщений: 4,518
21.04.2021, 14:06 15
Kill-o-Groom, пробуйте:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
 
rem имя файла
Set infile=M12345.*
 
rem ищем это
Set find=A0
 
rem меняем на это
Set replace=00
 
rem процесс
sed -i "s/%find%/%replace%/" "%infile%"
pause
exit
Для работы скрипта используйте утилиту sed (во вложении)
Вложения
Тип файла: zip sed.zip (208.3 Кб, 133 просмотров)
1
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 4
21.04.2021, 14:17 16
sed хорошо, но хочется сделать одним файлом, так как неясно на каких компьютерах будет запускаться батник и будет ли там sed вопрос.
0
3161 / 1087 / 491
Регистрация: 29.05.2016
Сообщений: 4,518
21.04.2021, 14:19 17
Kill-o-Groom, Вы же будете передавать батник на компьютеры. Попутно передайте и sed
0
6353 / 2778 / 1074
Регистрация: 06.06.2017
Сообщений: 9,426
21.04.2021, 18:09 18
Цитата Сообщение от Kill-o-Groom Посмотреть сообщение
средствами cmd
cmd + for тут бесполезны. См. js:
Javascript
1
2
3
4
5
file = 'M12345.txt'
with (WSH.CreateObject('Scripting.FileSystemObject')){
  text = openTextFile(file).readAll().replace(/A0/g,'00')
  with(openTextFile(file,2)){write(text);close()}
}
0
0 / 0 / 0
Регистрация: 10.05.2015
Сообщений: 60
30.05.2022, 07:02 19
Здравствуйте, есть следующий скрипт:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
Set infile=%1
Set find=%Param1%
Set replace=%Param2%
setlocal enabledelayedexpansion 
for /F "tokens=* delims=," %%n in (!infile!) do ( 
set LINE=%%n 
set TMPR=!LINE:%find%=%replace%! 
@echo !TMPR!>>tmp.txt 
)
move tmp.txt %infile%
endlocal
Скажем, надо найти строку "alpha=4" и заменить строкой "alpha=2". Скрипт просто не обрабатывает это правильно. Если строки брать в кавычки, вообще ничего не заменяет.
0
6302 / 2144 / 337
Регистрация: 10.12.2013
Сообщений: 7,387
30.05.2022, 16:24 20
можно приспособить программу exiftool
ZAMENA
Perl
1
2
3
4
5
6
7
8
9
10
$^I = '.saved';
 
while(<>) {
   s/\balpha=4\b/alpha=2/i;
   print;
}
 
print "Dear friend! Your original file(s) saved with '.saved' postfix\n";
 
exit;

Windows Batch file
1
exiftool -config ZAMENA  file1 file2 file3 fileN
0
30.05.2022, 16:24
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.05.2022, 16:24
Помогаю со студенческими работами здесь

Множественная замена текста в файле
Добрый день! Нужно в выбранном файле сделать множественные замены текста (5 переменных со...

Поиск и замена текста в REG-файле
Здравствуйте, помогите пожалуйста написать скрипт имеется файл C:\dir\1.reg нужно в нем найти...

Замена текста в файле и последующая сортировка строк
Есть файлы с расширением &quot;.n&quot; в папке &quot;c:\1&quot; текстом примерно такого содержания:...

Поиск и замена текста в файле, в содержимом которого имеются специальные символы
Поискал в инете, толкового ответа не нашел. Суть вопроса... Есть текстовый файл. При запуске...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала согласования+ стартер fast регистров. Файлы прилагаю. . . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru