![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Поиск и замена текста в файле |
|
CMD/BAT - Поиск и замена текста в файле
|
Новый участник Сообщения: 17 |
Здравствуйте.
Прошу помощи. Есть файл с именем 1.txt в нем последняя строчка заканчивается такими символами "текст::== ))" Необходимо символы "== ))" перенести на новую строчку, т.е. вставить перенос строки <CR><LF> Текст в кодировке ANSI. Как это сделать с помощью bat файла? Пробую следующее, не работает: setlocal enabledelayedexpansion Set "infile=D:\1.txt" Set "find="== ))"" Set "replace=\n"== ))"" @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!>>1.txt ) move 1.txt %infile%le% |
|
Отправлено: 18:51, 10-07-2016 |
Новый участник Сообщения: 17
|
Профиль | Сайт | Отправить PM | Цитировать To: alpap
Действительно моя ошибка. Теперь работает. Но как теперь применить данный код ко всем подобным файлам т.е. файлы в названии имеют маску ma2_годмесяц_день.txt При подставленный set "f=ma2_*.txt" не находит путь. |
Отправлено: 11:13, 11-07-2016 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Дмитрий_Кульгейко@vk, Предчувствия меня не обманули
![]() @Echo Off Set "Sep===))" Set /A NSep=4 Set "FName=ma2_*.txt" SetLocal EnableExtensions EnableDelayedExpansion For %%f IN ("%FName%") DO Call :ReLast "%%f" GoTo :Eof Set "FName=C:\ku-ku\tra la la\ma2_*.txt" И далее как в предыдущем посте
:ReLast Del "%~1.tmp" 2>nul Set "Str=" FOR /F "usebackq delims=" %%s IN (`type "%~1"`) DO ( If Not "!Str!"=="" >>"%~1.tmp" Echo !Str! Set "Str=%%s" ) If Not "!Str:~-%NSep%!"=="%Sep%" Del "%~1.tmp" 2>nul & GoTo :Eof If "!Str:~0,-%NSep%!"=="" Del "%~1.tmp" 2>nul & GoTo :Eof >>"%~1.tmp" Echo !Str:~0,-%NSep%! >>"%~1.tmp" Echo !Str:~-%NSep%! Move /Y "%~1.tmp" "%~1" >nul GoTo :Eof А если файлы и переименовать нужно
как в Вашей предыдущей теме
@Echo Off Set "Sep===))" Set /A NSep=4 Set "FName=ma2_?????_??.txt" Set "Pref=12345_5_" SetLocal EnableExtensions EnableDelayedExpansion For %%f IN ("%FName%") DO Call :ReLast "%%f" GoTo :Eof :ReLast Del "%~1.tmp" 2>nul Set "Str=" FOR /F "usebackq delims=" %%s IN (`type "%~1"`) DO ( If Not "!Str!"=="" >>"%~1.tmp" Echo !Str! Set "Str=%%s" ) If Not "!Str:~-%NSep%!"=="%Sep%" Del "%~1.tmp" 2>nul & GoTo :Eof If "!Str:~0,-%NSep%!"=="" Del "%~1.tmp" 2>nul & GoTo :Eof >>"%~1.tmp" Echo !Str:~0,-%NSep%! >>"%~1.tmp" Echo !Str:~-%NSep%! Set "Name=%~n1" Set "Name2=0!Name:~8,-3!" Set "Name=%Pref%!Name:~6,2!!Name2:~-2!!Name:~-2!%~x1" Move /Y "%~1.tmp" "%~dp1%Name%" >nul If Exist "%~dp1%Name%" echo Del "%~1" GoTo :Eof |
------- Последний раз редактировалось megaloman, 11-07-2016 в 12:43. Отправлено: 11:50, 11-07-2016 | #12 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Дмитрий_Кульгейко@vk,
для моего кода изменения такие: или используйте лучше код megaloman, удобнее. |
Последний раз редактировалось alpap, 11-07-2016 в 14:02. Отправлено: 12:58, 11-07-2016 | #13 |
Новый участник Сообщения: 17
|
Профиль | Сайт | Отправить PM | Цитировать To: megaloman
Ура все работает. Спасибо всем за помощь. To: alpap Ваш код тоже работает, но результат сохраняет в файле с именем %A Посоветуйте книгу по написанию кода в cmd/bat. |
Отправлено: 13:34, 11-07-2016 | #14 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата Дмитрий_Кульгейко@vk:
Цитата Дмитрий_Кульгейко@vk:
|
||
Отправлено: 14:03, 11-07-2016 | #15 |
Новый участник Сообщения: 17
|
Профиль | Сайт | Отправить PM | Цитировать Спасибо.
|
Отправлено: 17:51, 12-07-2016 | #16 |
Новый участник Сообщения: 17
|
Профиль | Сайт | Отправить PM | Цитировать alpap, спасибо буду учится.
megaloman, файлы действительно и переименовать надо было ))) По старому вопросу с датой в названии 316546, есть момент. День оказывается тоже может состоять как из двух цифр, так и из одной. |
Отправлено: 18:42, 12-07-2016 | #17 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Исправляю погрешности постановки: В имени файла день или месяц могут быть любыми (одно или двузначными)
@Echo Off Set "Sep===))" Set /A NSep=4 Set "FName=D:\Delete\ma2_*_*.txt" Set "Pref=12345_5_" SetLocal EnableExtensions EnableDelayedExpansion For %%f IN ("%FName%") DO Call :ReLast "%%f" GoTo :Eof :ReLast Del "%~1.tmp" 2>nul Set "Str=" FOR /F "usebackq delims=" %%s IN (`type "%~1"`) DO ( If Not "!Str!"=="" >>"%~1.tmp" Echo !Str! Set "Str=%%s" ) If Not "!Str:~-%NSep%!"=="%Sep%" Del "%~1.tmp" 2>nul & GoTo :Eof If "!Str:~0,-%NSep%!"=="" Del "%~1.tmp" 2>nul & GoTo :Eof >>"%~1.tmp" Echo !Str:~0,-%NSep%! >>"%~1.tmp" Echo !Str:~-%NSep%! FOR /F "usebackq tokens=2,3 delims=_" %%s IN ('%~n1') DO Set "YYYYMM=%%s" & Set "DD=0%%t" Set "MM=0!YYYYMM:~4,2! Set "Name=%~dp1%Pref%!YYYYMM:~2,2!!MM:~-2!!DD:~-2!%~x1" move /Y "%~1.tmp" "!Name!" >nul If Exist "!Name!" Del "%~1" 2>nul GoTo :Eof |
------- Последний раз редактировалось megaloman, 12-07-2016 в 19:56. Отправлено: 19:28, 12-07-2016 | #18 |
Новый участник Сообщения: 17
|
Профиль | Сайт | Отправить PM | Цитировать Откорректировал год в двухзначный, не уверен что правильно, но работает )) получил:
Скрытый текст
@Echo Off Set "Sep== ![]() Set /A NSep=4 Set "FName=c:\TEMP\ma2_*_*.pdf" Set "Pref=12345_5_" Set "NewExt=.txt" SetLocal EnableExtensions EnableDelayedExpansion For %%f IN ("%FName%") DO Call :ReLast "%%f" GoTo :Eof :ReLast Del "%~1.tmp" 2>nul Set "Str=" FOR /F "usebackq delims=" %%s IN (`type "%~1"`) DO ( If Not "!Str!"=="" >>"%~1.tmp" Echo !Str! Set "Str=%%s" ) If Not "!Str:~-%NSep%!"=="%Sep%" Del "%~1.tmp" 2>nul & GoTo :Eof If "!Str:~0,-%NSep%!"=="" Del "%~1.tmp" 2>nul & GoTo :Eof >>"%~1.tmp" Echo !Str:~0,-%NSep%! >>"%~1.tmp" Echo !Str:~-%NSep%! FOR /F "usebackq tokens=2,3 delims=_" %%s IN ('%~n1') DO Set "YYYYMM=%%s" & Set "DD=0%%t" Set "MM=0!YYYYMM:~4,2! Set "Name=%~dp1%Pref%!YYYYMM:~2,2!!MM:~-2!!DD:~-2!%NewExt%" move /Y "%~1.tmp" "!Name!" >nul If Exist "!Name!" Del "%~1" 2>nul GoTo :Eof |
Отправлено: 19:50, 12-07-2016 | #19 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Дмитрий_Кульгейко@vk, Извините, забыл что год на выходе двузначный, в предыдущем посте я его исправил, в другой теме сейчас тоже сделаю, чтобы не плодить лишние посты
|
------- Отправлено: 19:57, 12-07-2016 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - Сложная замена текста в файле | niverprof | Скриптовые языки администрирования Windows | 11 | 22-12-2014 11:45 | |
CMD/BAT - BAT поиск текста в файле с условием | rosalin | Скриптовые языки администрирования Windows | 10 | 05-05-2014 14:56 | |
VBS/WSH/JS - [решено] замена текста в файле по шаблону | dembel_zone | Скриптовые языки администрирования Windows | 12 | 29-12-2013 19:21 | |
CMD/BAT - Поиск и удаление текста в файле | ajakzs | Скриптовые языки администрирования Windows | 6 | 18-10-2012 09:18 | |
[решено] Поиск и замена текста в файле | TERMINAL | AutoIt | 6 | 16-03-2011 17:49 |
|