VBS/WSH/JS - [решено] Замена текста из другого файла

Аватара пользователя
ul9

VBS/WSH/JS - [решено] Замена текста из другого файла

Сообщение ul9 »

Всем привет!

Решила снова прибегнуть к помощи форумчан Изображение

Попробую описать подробно проблему. Есть папка (test) с файлами и подпапками, содержащими разные файлы. Созданы дополнительно два текстовых файла. Из первого файла берём образец (многострочный текстовый файл), т.е. то, что надо найти в файлах папок test. А второй файл это то, на что нужно заменить найденное. Хотелось бы, чтобы можно было задавать маску поиска (strMask = "*.txt")
Аватара пользователя
ul9

Re: VBS/WSH/JS - [решено] Замена текста из другого файла

Сообщение ul9 »

Пробовала с gsar и sed экспериментировать, но что-то не получилось добиться поиска текста из файла-образца.





Код:

Код: Выделить всё

@echo off
setlocal
set "replace=some text"
sed "s/zamena/%replace%/g" test1.txt 1>test2.txt

если бы можно было задавать путь

set "replace=C:\test\example.txt"
Аватара пользователя
ul9

Re: VBS/WSH/JS - [решено] Замена текста из другого файла

Сообщение ul9 »

Спасибо Вам. А как его использовать? Приведите пожалуйста пример.



Код:

Код: Выделить всё

Sub Usage()
	WScript.Echo "Usage: cscript.exe //nologo " & WScript.ScriptName & " " & _
		"/FolderForScan: " & _
		"/FileExtension: " & _
		"/FileWhatFind: " & _
		"/FileReplaceBy:"
End Sub
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Замена текста из другого файла

Сообщение Iska »

Цитата ul9:



Из первого файла берём образец (многострочный текстовый файл), т.е. то, что надо найти в файлах папок test. А второй файл это то, на что нужно заменить найденное.
VBS/WSH/JS - [решено] Замена текста из другого файла




Выложите архив с примером: «первый файл» — что заменять, «второй файл» — на что заменять, и образец файла — где заменять.
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Замена текста из другого файла

Сообщение Iska »

ul9, Вы Windows 8, случайно, не пробовали?



Объясните, как Вы планируете ориентироваться, какую кнопку нажимать — по памяти?
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Замена текста из другого файла

Сообщение Iska »

ul9, тип файла не важен. Важна кодировка. Особенно желательно, чтобы она совпадала у тех файлов, в которых ищем, так и у тех файлов, которые используются в качестве источников фрагментов поиска и замены. В приведённом Вами примере это не так: «work.htm» имеет кодировку windows-1251, а «Найти это.txt» и «заменить этим.txt» — UTF-8, да ещё и без BOM. Что, при наличии во фрагменте поиска кирилицы в приведённом примере делает невозможным простой поиск и замену.



Что скажете?
Аватара пользователя
ul9

Re: VBS/WSH/JS - [решено] Замена текста из другого файла

Сообщение ul9 »

Нашла ещё вот такой скрипт, но опять-таки заменяет не из текстового файла



[cscript|wscript] replace.vbs Find Replacewith File

Find … Required. Substring being searched for.

Replacewith … Required. Replacement substring.

File … Source and destination file for the replacement





Код:

Код: Выделить всё

Dim FileName, Find, ReplaceWith, FileContents, dFileContents
Find         = WScript.Arguments(0)
ReplaceWith  = WScript.Arguments(1)
FileName     = WScript.Arguments(2)
'Read source text file
FileContents = GetFile(FileName)
'replace all string In the source file
dFileContents = replace(FileContents, Find, ReplaceWith, 1, -1, 1)
'Compare source And result
if dFileContents  FileContents Then
  'write result If different
  WriteFile FileName, dFileContents
  Wscript.Echo "Replace done."
  If Len(ReplaceWith)  Len(Find) Then 'Can we count n of replacements?
    Wscript.Echo _
    ( (Len(dFileContents) - Len(FileContents)) / (Len(ReplaceWith)-Len(Find)) ) & _
    " replacements."
  End If
Else
  Wscript.Echo "Searched string Not In the source file"
End If
'Read text file
function GetFile(FileName)
  If FileName"" Then
    Dim FS, FileStream
    Set FS = CreateObject("Scripting.FileSystemObject")
      on error resume Next
      Set FileStream = FS.OpenTextFile(FileName)
      GetFile = FileStream.ReadAll
  End If
End Function
'Write string As a text file.
function WriteFile(FileName, Contents)
  Dim OutStream, FS
  on error resume Next
  Set FS = CreateObject("Scripting.FileSystemObject")
    Set OutStream = FS.OpenTextFile(FileName, 2, True)
    OutStream.Write Contents
End Function
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Замена текста из другого файла

Сообщение Iska »

Цитата ul9:



Всё поняла. Все файлы будут в UTF-8 без BOM.

«Найти это.txt» и «заменить этим.txt» тоже сохраню в нужной кодировке, так как они делаются руками. А вот файлы, в которых нужно работать, приходят в UTF-8 без BOM.
VBS/WSH/JS - [решено] Замена текста из другого файла




Ясно.




Цитата ul9:



И я ещё хотела бы уточнить, возможен будет такой вариант, чтобы при пустом файле «заменить этим.txt» в файле «work.htm» просто удалялся фрагмент кода, заданный в «Найти это.txt»?
VBS/WSH/JS - [решено] Замена текста из другого файла




Да.



Как осуществляем замену: переписываем содержимое файла новым содержимым (с произведённой заменой) поверх, без резервной копии, так?
Аватара пользователя
ul9

Re: VBS/WSH/JS - [решено] Замена текста из другого файла

Сообщение ul9 »

Цитата Iska:



Как осуществляем замену: переписываем содержимое файла новым содержимым (с произведённой заменой) поверх, без резервной копии, так?
VBS/WSH/JS - [решено] Замена текста из другого файла




В резервной копии нет необходимости. Меняем безоговорочно и безвозвратно Изображение
Вложения
replace.rar
(7.26 КБ) 0 скачиваний
replace.rar
(7.26 КБ) 0 скачиваний
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Замена текста из другого файла

Сообщение Iska »

ul9, тип файла не важен. Важна кодировка. Особенно желательно, чтобы она совпадала у тех файлов, в которых ищем, так и у тех файлов, которые используются в качестве источников фрагментов поиска и замены. В приведённом Вами примере это не так: «work.htm» имеет кодировку windows-1251, а «Найти это.txt» и «заменить этим.txt» — UTF-8, да ещё и без BOM. Что, при наличии во фрагменте поиска кирилицы в приведённом примере делает невозможным простой поиск и замену.

Что скажете?
Ответить

Вернуться в «Скриптовые языки администрирования Windows»