Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Topirka
0 / 0 / 0
Регистрация: 16.04.2018
Сообщений: 6
1

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

16.04.2018, 17:30. Просмотров 1034. Ответов 10
Метки нет (Все метки)

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

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

342342532532542542А03423523523523523
231434213413413421А1234232342А032423423423423

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

342342532532542542003423523523523523
231434213413413421002342323420032423423423423

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

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

Просьба, Вы можете полностью описать процесс? Очень хотелось бы понять на примере, чтоб дальше писать самому.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2018, 17:30
Ответы с готовыми решениями:

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

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

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

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

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

10
alpap
1455 / 1171 / 381
Регистрация: 26.04.2015
Сообщений: 4,118
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
Topirka
0 / 0 / 0
Регистрация: 16.04.2018
Сообщений: 6
17.04.2018, 13:42  [ТС] 3
Работает идеально)
А можно Вас попросить описать процесс? За что отвечает каждая из?

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

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

Буду очень благодарен если полностью опишите процесс, чтоб понимать что и к чему.Так проще учиться. Большое Вам спасибо!
0
alpap
1455 / 1171 / 381
Регистрация: 26.04.2015
Сообщений: 4,118
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
Topirka
0 / 0 / 0
Регистрация: 16.04.2018
Сообщений: 6
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
alpap
1455 / 1171 / 381
Регистрация: 26.04.2015
Сообщений: 4,118
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
Topirka
0 / 0 / 0
Регистрация: 16.04.2018
Сообщений: 6
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
cahbe
0 / 0 / 0
Регистрация: 19.07.2016
Сообщений: 2
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
bidstrup
128 / 39 / 5
Регистрация: 11.03.2018
Сообщений: 175
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
cahbe
0 / 0 / 0
Регистрация: 19.07.2016
Сообщений: 2
21.07.2018, 08:56 10
Вариант рабочий, но боюсь в моём случае закрытый "узел" (/) и пустой (><) немного разные вещи. Попробую скормить программе этот вариант, но если не получится есть ли варианты именно с тупым вытиранием текста между тегов?

И раз уж такая пьянка - можно ли увидеть в батнике что он сделал? Вывести лог или как было\стало после его выполнения?
0
bidstrup
128 / 39 / 5
Регистрация: 11.03.2018
Сообщений: 175
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
1
21.07.2018, 09:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2018, 09:30

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru