Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Найти текст в файле и вставить над ним несколько строк (http://forum.oszone.net/showthread.php?t=332175)

Sergey.l 27-12-2017 21:50 2787508

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

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

alpap 27-12-2017 23:58 2787557

Код:

@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


alpap 28-12-2017 00:22 2787562

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

Sergey.l 24-01-2018 07:56 2793420

Вложений: 1
Доброго времени суток!
Помогите записать два поиска в один. Прикрепил два батника. Можно ли их записать в один?
Цитата:

Цитата alpap (Сообщение 2787557)
Код:

@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



alpap 25-01-2018 01:36 2793634

Цитата:

Цитата 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


Sergey.l 27-01-2018 14:15 2794059

Спасибо! Столкнулся с проблемой. При выполнении батника из папки где находиться целевой файл folder.prm компьютер начинает виснуть и файлик $ увеличивается со скоростью 0.1 кбайт/с. Файл в котором осуществляется поиск (folder.prm) объемом всего лишь 12 Кбайт. Непойму с чем может быть связано такое замедление процесса?
Цитата:

Цитата alpap (Сообщение 2793634)
Цитата:

Цитата 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



megaloman 28-01-2018 18:42 2794229

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 (это существенно при наличии кириллических символов в искомом слове и во вставляемых строках в файле)

alpap 28-01-2018 23:06 2794275

Цитата:

Цитата megaloman
это надежнее. »

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


Время: 21:04.

Время: 21:04.
© OSzone.net 2001-