Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Найти текст в файле и вставить над ним несколько строк

Ответить
Настройки темы
CMD/BAT - Найти текст в файле и вставить над ним несколько строк

Новый участник


Сообщения: 41
Благодарности: 0

Профиль | Отправить PM | Цитировать


Как при помощи батника или скрипта найти в файле 1.txt, например строку с текстом
search
и над ней вставить три строки с текстом и текущей датой (ddmm), например
search1/2712
search2/2712
search3/2712

но только, чтобы дата формировалась автоматически при вставке

Отправлено: 21:50, 27-12-2017

 

Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@echo off
set "sx=search"
set "nd=%date:~0,2%%date:~3,2%"

<1.txt>$ (for /f "tokens=1* delims=[]" %%a in ('find /n /v ""') do @echo "%%b"|>nul find /i "%sx%" && (
  echo search1/%nd%
  echo search2/%nd%
  echo search3/%nd%
  echo %sx%
 ) || (
  <nul set/p="%%b"& echo:
 )
)& >nul move $ 1.txt
pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:58, 27-12-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Sergey.l,
предполагаю что следующим будет вопрос, направленный в ...
отвечаю:
это цитата из вашего файла: "здесь имеется текст в ориг. файле"
а это правильный вопрос Iska, так и оставщийся без ответа

Отправлено: 00:22, 28-12-2017 | #3


Новый участник


Сообщения: 41
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: zip дип бат.zip
(816 байт, 2 просмотров)

Доброго времени суток!
Помогите записать два поиска в один. Прикрепил два батника. Можно ли их записать в один?
Цитата alpap:
Код: Выделить весь код
@echo off
set "sx=search"
set "nd=%date:~0,2%%date:~3,2%"

<1.txt>$ (for /f "tokens=1* delims=[]" %%a in ('find /n /v ""') do @echo "%%b"|>nul find /i "%sx%" && (
  echo search1/%nd%
  echo search2/%nd%
  echo search3/%nd%
  echo %sx%
 ) || (
  <nul set/p="%%b"& echo:
 )
)& >nul move $ 1.txt
pause

Последний раз редактировалось Sergey.l, 24-01-2018 в 21:18.


Отправлено: 07:56, 24-01-2018 | #4


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата Sergey.l:
Помогите записать два поиска в один »
перекинете сами в 1251 или исправите, у меня 866 автоматом и не стал с этим еще возиться (вообще просто позже заметил)
Код: Выделить весь код
@echo off
set "sx1=search"
set "sx2=end"
set "nd=%date:~0,2%%date:~3,2%"

<folder.prm>$ (for /f "tokens=1* delims=[]" %%a in ('find /n /v ""') do @(
  echo "%%b"|>nul find /i "%sx1%" && (
   echo __SUB__SECT: ╤шёЄхьэ√щ *∙шъ\%nd%=536870912
   echo %sx1%
  ) || (
   echo "%%b"|>nul find /i "%sx2%" && (
    echo ╤шёЄхьэ√щ *∙шъ\%nd%]
    echo Type=536870912
    echo FoldDir=D:\Dipost\BOXES\╤шёЄхьэ√щ *∙шъ\%nd%
    echo N_New=0
    echo __SUB__SECT: ╤шёЄхьэ√щ *∙шъ\%nd%\тїюф=536870912
    echo __SUB__SECT: ╤шёЄхьэ√щ *∙шъ\%nd%\юЄяЁ=536870912
    echo __SUB__SECT: ╤шёЄхьэ√щ *∙шъ\%nd%\єтхф=536870912
    echo ╤шёЄхьэ√щ *∙шъ\%nd%\тїюф]
    echo Type=536870912
    echo FoldDir=D:\Dipost\BOXES\╤шёЄхьэ√щ *∙шъ\%nd%\тїюф
    echo N_New=0
    echo ╤шёЄхьэ√щ *∙шъ\%nd%\юЄяЁ]
    echo Type=536870912
    echo FoldDir=D:\Dipost\BOXES\╤шёЄхьэ√щ *∙шъ\%nd%\юЄяЁ
    echo N_New=0
    echo ╤шёЄхьэ√щ *∙шъ\%nd%\єтхф]
    echo Type=536870912
    echo FoldDir=D:\Dipost\BOXES\╤шёЄхьэ√щ *∙шъ\%nd%\єтхф
    echo N_New=0
    echo %sx2%
   ) || (
    <nul set/p="%%b"& echo:
   )
  )& >nul move $ folder.prm
 )
)
pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:36, 25-01-2018 | #5


Новый участник


Сообщения: 41
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо! Столкнулся с проблемой. При выполнении батника из папки где находиться целевой файл folder.prm компьютер начинает виснуть и файлик $ увеличивается со скоростью 0.1 кбайт/с. Файл в котором осуществляется поиск (folder.prm) объемом всего лишь 12 Кбайт. Непойму с чем может быть связано такое замедление процесса?
Цитата alpap:
Цитата Sergey.l:
Помогите записать два поиска в один »
перекинете сами в 1251 или исправите, у меня 866 автоматом и не стал с этим еще возиться (вообще просто позже заметил)
Код: Выделить весь код
@echo off
set "sx1=search"
set "sx2=end"
set "nd=%date:~0,2%%date:~3,2%"

<folder.prm>$ (for /f "tokens=1* delims=[]" %%a in ('find /n /v ""') do @(
  echo "%%b"|>nul find /i "%sx1%" && (
   echo __SUB__SECT: ╤шёЄхьэ√щ *∙шъ\%nd%=536870912
   echo %sx1%
  ) || (
   echo "%%b"|>nul find /i "%sx2%" && (
    echo ╤шёЄхьэ√щ *∙шъ\%nd%]
    echo Type=536870912
    echo FoldDir=D:\Dipost\BOXES\╤шёЄхьэ√щ *∙шъ\%nd%
    echo N_New=0
    echo __SUB__SECT: ╤шёЄхьэ√щ *∙шъ\%nd%\тїюф=536870912
    echo __SUB__SECT: ╤шёЄхьэ√щ *∙шъ\%nd%\юЄяЁ=536870912
    echo __SUB__SECT: ╤шёЄхьэ√щ *∙шъ\%nd%\єтхф=536870912
    echo ╤шёЄхьэ√щ *∙шъ\%nd%\тїюф]
    echo Type=536870912
    echo FoldDir=D:\Dipost\BOXES\╤шёЄхьэ√щ *∙шъ\%nd%\тїюф
    echo N_New=0
    echo ╤шёЄхьэ√щ *∙шъ\%nd%\юЄяЁ]
    echo Type=536870912
    echo FoldDir=D:\Dipost\BOXES\╤шёЄхьэ√щ *∙шъ\%nd%\юЄяЁ
    echo N_New=0
    echo ╤шёЄхьэ√щ *∙шъ\%nd%\єтхф]
    echo Type=536870912
    echo FoldDir=D:\Dipost\BOXES\╤шёЄхьэ√щ *∙шъ\%nd%\єтхф
    echo N_New=0
    echo %sx2%
   ) || (
    <nul set/p="%%b"& echo:
   )
  )& >nul move $ folder.prm
 )
)
pause

Отправлено: 14:15, 27-01-2018 | #6


Ветеран


Contributor


Сообщения: 2709
Благодарности: 1685

Профиль | Отправить PM | Цитировать


alpap, Sergey.l,
Ненавижу!!! Работать с текстом в CMD. Вот совместил CMD и JS. ИМХО, это надежнее.
Код: Выделить весь код
@set @E=1; /*
@Echo Off

rem chcp 1251 >nul

Set "TextFile=Z:\Box_In\1.txt"
Set "Dt=%Date:~0,2%%Date:~3,2%"

Cscript //NoLogo /E:jscript "%~dpnx0" "%TextFile%" "Ищем 1" "Вставляем 1/%Dt%" "Вставляем 2/%Dt%" "Вставляем 3/%Dt%"
Cscript //NoLogo /E:jscript "%~dpnx0" "%TextFile%" "Ищем 2" "Вставляем 4/%Dt%" "Вставляем 5/%Dt%" "Вставляем 6/%Dt%"

GoTo :Eof

*/
var oArg = WScript.Arguments;

if (oArg.Count()<3) {WScript.Echo("ErrorLevel=1: Few arguments");WScript.Quit(1)}

var InsTxt="";
//var InsTxt="\n";
for (var i=2; i<oArg.Count(); i++) {InsTxt=InsTxt+oArg(i)+"\n"}
//WScript.Echo(oArg(1)+"\n"+InsTxt);

var FSO=WScript.CreateObject("Scripting.FileSystemObject");
var inFile,AllTxt;

try {inFile=FSO.OpenTextFile(oArg(0),1)}
catch (err) {if (err != 0) {WScript.Echo("ErrorLevel=2: "+err.description);WScript.Quit(2)}}
AllTxt=inFile.ReadAll();
inFile.Close();

AllTxt=AllTxt.replace(oArg(1),InsTxt+oArg(1));

try {inFile=FSO.OpenTextFile(oArg(0),2,true)}
catch (err) {if (err != 0) {WScript.Echo("ErrorLevel=3: "+err.description);WScript.Quit(3)}}
inFile.Write(AllTxt);
inFile.Close();
Вставить можно произвольное число строк >=1, указав их при вызове js-скрипта
Можно вставить вместо нескольких искомых строк тексты, можно обработать несколько текстовых файлов, вызывая js-скрипт с конкретными данными, указанными в аргументах.
Уточнение задачи
Цитата Sergey.l:
Как при помощи батника или скрипта найти в файле 1.txt, например строку с текстом
search »
Я предполагал, что search начинается с новой строки и надо в ответе получить

search1/2712
search2/2712
search3/2712
search

Если у Вас ситуация тра ля ля search, то скрипт приведёт к результату:

тра ля ля search1/2712
search2/2712
search3/2712
search

Если это Вас не устраивает, то в скрипте вместо
var InsTxt="";

напишите
var InsTxt="\n";

ПолУчите

тра ля ля
search1/2712
search2/2712
search3/2712
search

Я предполагал, что скрипт сохраняется в 866 кодировке, в противном случае вместо
rem chcp 1251 >nul
сделайте
chcp 1251 >nul

текстовый файл в кодировке 1251 (это существенно при наличии кириллических символов в искомом слове и во вставляемых строках в файле)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 28-01-2018 в 21:33.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:42, 28-01-2018 | #7


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата megaloman:
это надежнее. »
солидарен, вероятно (скорее всего) проблема или в символах в тексте или кодировке (или оба случая вместе), поэтому даже не стал далее развивать мысль на cmd (очень ненадежном, недостаточным для данного случая инструменте).
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:06, 28-01-2018 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Найти текст в файле и вставить над ним несколько строк

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Найти текст в файле и вставить над ним несколько строк Sergey.l Скриптовые языки администрирования Windows 5 27-12-2017 18:47
CMD/BAT - Поиск строк и добавление к ним цифр в файле mountainspeak Скриптовые языки администрирования Windows 1 09-11-2016 13:34
CMD/BAT - [решено] CMD/BAT - С помощью bat-ника найти и удалить текст в файле InVariable Скриптовые языки администрирования Windows 4 22-05-2015 20:06
CMD/BAT - Найти и заменить текст в файле. Yurich75 Скриптовые языки администрирования Windows 2 07-01-2012 19:09
CMD/BAT - С помощью bat-ника найти и заменить текст в файле на текст из другого файла Nun-Nun Скриптовые языки администрирования Windows 1 08-03-2011 15:25




 
Переход