Windows Script Host
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
- LocKtaR-o-DarK
- Сообщения: 349
- Зарегистрирован: Пт авг 12, 2005 04:20
- Откуда: Москва
- Контактная информация:
необходимо поменять кодировку с cp_1252 на cp_1251, 1)используя редактор реестра (для продвинутых), 2)скачав с нета готовые *.reg или *.exe файлы или 3)пользуясь различными твикерами, мне больше всего по душе знаменитый xptweacker, на xp и xpsp1 все корректно, в xpsp2 уже есть несколько неточностей (проверял лично), но большинство настроек выполняет неплохо даже в сп2 об этом уже давно всем известно господа, инет полон инфы об этом, так что ищем поиском
От того, каким именно способом ты изменишь запись в Реестре (хоть твикером, хоть рег-файлом, хоть даже прямым редактированием бинарных файлов реестра из другой операционной системыLocKtaR-o-DarK писал(а):...об этом уже давно всем известно господа, инет полон инфы об этом, так что ищем поиском
Это - кривой способ.
Вот подумал, что может кому-нить пригодится...
На старом форуме появилась задача по поиску и замене текста в выделенных файлах:
На старом форуме появилась задача по поиску и замене текста в выделенных файлах:
Написал vbs-скрипт, использующий EmEditor (версия EmEditor-а - 4.13, не знаю, как на пятерке работать будет):1. выделяем файлы для редактирования
2. жмем сочетание клавиш (т.е. запускаем плагин) и в появившемся маленьком поле ввода пишем то, что нужно найти и заменить. Жмем ок.
3. в появившемся после этого окне пишем то, НА чТО надо заменить. Жмем ок.
Код: Выделить всё
'==================================================================
' Поиск и замена строк в выделенных файлах в TC с помощью EmEditor
' В параметрах вызова из TC должно быть прописано:
' %L
'
' Ниже задайте правильный путь к EmEditor
'==================================================================
Dim Editor
'-------- Путь к EmEditor -----------------------
Editor = "d:\Program Files\EmEditor\emeditor.exe"
'------------------------------------------------
Dim WS, FSO, StreamFile, Find_String, Replace_String, Current_File, MsgBut
Set WS = WScript.CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set StreamFile = FSO.OpenTextFile(WScript.Arguments(0), 1)
Find_String = InputBox("Введите искомую строку", "Поиск и замена")
if Len(Find_String) = 0 then
MsgBut = MsgBox("Не задана строка для поиска!", vbOKOnly + vbExclamation, "Поиск и замена")
WScript.Quit()
End if
Replace_String = InputBox("Введите строку для замены", "Поиск и замена")
Do While Not StreamFile.AtEndOfStream
Current_File = StreamFile.ReadLine
WS.Run """" & Editor & """ /fc """ & Find_String & """ """ & Current_File & """ /rw """ & Replace_String & """"
Loop
StreamFile.Close
Set WS = Nothing
Set FSO = Nothing
Set StreamFile = Nothing
Wscript.Quit2Volniy - спасибо за прогу, люблю новые идеи.
2Batya
Наверно вызываю неверно -как правильно прикрутить к total'у?
я сунул в панель, мышой тащу туда файлы, в итоге цикл идёт по строчкам а не по файлам...
поясни непонятливому фразу:
' В параметрах вызова из TC должно быть прописано:
' %L
PS в итоге просто иконку сделал "C:\Program Files\EmEditor\emeditor.exe" /rd
2Batya
Наверно вызываю неверно -как правильно прикрутить к total'у?
я сунул в панель, мышой тащу туда файлы, в итоге цикл идёт по строчкам а не по файлам...
поясни непонятливому фразу:
' В параметрах вызова из TC должно быть прописано:
' %L
PS в итоге просто иконку сделал "C:\Program Files\EmEditor\emeditor.exe" /rd
Последний раз редактировалось Zergal Ср ноя 25, 2009 17:20, всего редактировалось 1 раз.
Zergal
Сохраняем код в файл, например, ReplaceInFiles.vbs.
В этом файле меняем "d:\Program Files\EmEditor\emeditor.exe" на "C:\Program Files\EmEditor\emeditor.exe" (твой путь).
Делаем кнопку вида (скопируй код, нажми прав. кнопку мыши на панели и скажи "Вставить"):
Измени кнопку - поменяй путь к ReplaceInFiles.vbs на свой.
Как работает.
1. Выделяешь файлы.
2. Нажимаешь кнопку.
3. В появившемся окне пишешь то, что нужно найти и заменить. ОК.
4. В появившемся после этого окне пишешь то, НА ЧТО надо заменить. ОК.
Сохраняем код в файл, например, ReplaceInFiles.vbs.
В этом файле меняем "d:\Program Files\EmEditor\emeditor.exe" на "C:\Program Files\EmEditor\emeditor.exe" (твой путь).
Делаем кнопку вида (скопируй код, нажми прав. кнопку мыши на панели и скажи "Вставить"):
Код: Выделить всё
TOTALCMD#BAR#DATA
d:\WHS\ReplaceInFiles.vbs
%L
shell32.dll,22
Поиск и замена в файлах
-1
Как работает.
1. Выделяешь файлы.
2. Нажимаешь кнопку.
3. В появившемся окне пишешь то, что нужно найти и заменить. ОК.
4. В появившемся после этого окне пишешь то, НА ЧТО надо заменить. ОК.
Вот это мне и было нужно, спасибо.
Я чуть поменял пример из Борна, добавил Батин скрипт, взболтал но не перемешивал и получил то же но быстрее и без всяких emeditor.exe за которых между прочем бабки просят
ЗЫ Может сбоить на символах, которые не понимает шаблон.
Не причёсывал, лень лохматая.
Ругайтесь, мне будет приятно.
Я чуть поменял пример из Борна, добавил Батин скрипт, взболтал но не перемешивал и получил то же но быстрее и без всяких emeditor.exe за которых между прочем бабки просят
Код: Выделить всё
'**************************************************
' File: ReplaceTxt.vbs (WSH sample in VBScript)
' Author: (c) G. Born, Batya, Zergal
'
' Что-то меняет в Ваших файлах
' УРА - Никакого бэкапа!!!
'**************************************************
Option Explicit
Dim WS, FSO2, StreamFile, Find_String, Replace_String, Current_File, MsgBut
Set WS = WScript.CreateObject("WScript.Shell")
Set FSO2 = CreateObject("Scripting.FileSystemObject")
Set StreamFile = FSO2.OpenTextFile(WScript.Arguments(0), 1)
Find_String = InputBox("Введите искомую строку", "Поиск и замена")
if Len(Find_String) = 0 then
MsgBut = MsgBox("Не задана строка для поиска!", vbOKOnly + vbExclamation, "Поиск и замена")
WScript.Quit()
End if
Replace_String = InputBox("Введите строку для замены", "Поиск и замена")
' We must define ForWriting because the
' iomode constants are unknown to VBScript.
Const ForWriting = 2 ' iomode: write access
' Const inF = "TestFile.txt"
' Const outF = "TestFile1.txt"
Do While Not StreamFile.AtEndOfStream
' Here are the strings for replacement.
Dim Text
Dim fso, oFile ' Object variable
Dim oFileIn, oFileOut ' Text stream
Dim path, fileIn, fileOut
path = StreamFile.ReadLine ' Retrieve current path to script.
fileIn = path ' Create filenames.
fileOut = left(path, len(path)-4) & "_" & right(path,4)
' Create a FileSystemObject object to access the file system.
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(fileIn) Then ' Input file exists?
WScript.Echo "File '" & fileIn & "' not found"
WScript.Quit 1
End If
' Input file present; open file and create output file.
Set oFileIn = fso.OpenTextFile(fileIn) ' Open input file.
Set oFileOut = fso.OpenTextFile(fileOut, _
ForWriting, True) ' Open output file.
Do While Not (oFileIn.atEndOfStream)
Text = oFileIn.ReadLine ' Read a line.
Text = Filter(Text, Find_String, Replace_String)
oFileOut.WriteLine Text ' Write text.
Loop
oFileOut.Close
oFileIn.Close
fso.DeleteFile FileIn
Set oFile = fso.GetFile(fileOut)
oFile.move FileIn
Set oFileOut = nothing
Set oFileIn = nothing
Loop
Function GetPath
' Retrieve the script path.
Dim path
path = WScript.ScriptFullName ' Script name
GetPath = Left(path, InStrRev(path, "\"))
End Function
Function Filter(txt, expr1, expr2)
' Replace expr1 with expr2 in text.
Dim oReg
Set oReg = New RegExp ' Create regular expression.
oReg.Global = True ' All matches
oReg.IgnoreCase = True ' Make case-insensitive.
' Replace all expr1 with expr2.
oReg.Pattern = expr1 ' Set pattern.
Filter = oReg.Replace(txt, expr2)
End Function
'*** End
Не причёсывал, лень лохматая.
Ругайтесь, мне будет приятно.
Последний раз редактировалось Zergal Ср ноя 25, 2009 08:51, всего редактировалось 1 раз.
4-ая редакция
Почти то же самое, но только по-человечески
Изменил немного код, чтобы файлы, в которых разыскиваемая строка отсутствует, не перезаписывались (действительно, нах оно?).
Код: Выделить всё
'=========================[ Start of file ]=========================
' File: ReplaceInFiles.vbs
' Description: Производит поиск текста с заменой
' в выделенных текстовых файлах
' Installation: Создайте кнопку на панели TC
' Команда: "диск:\путь\к\файлу\ReplaceInFiles.vbs"
' Параметры: "%L"
' Copyright: (c) 2006-2008, Volniy
Option Explicit
Dim FSO, Find_String, Replace_String, F, Buffer, ListFile, Found
Const ForReading = 1, ForWriting = 2
Set FSO = CreateObject("Scripting.FileSystemObject")
Find_String = InputBox("Введите искомую строку", "Поиск и замена")
If Len(Find_String) = 0 Then
MsgBox "Не задана строка поиска!", vbExclamation, "Поиск и замена"
WScript.Quit()
End If
Replace_String = InputBox("Введите строку для замены", "Поиск и замена")
Set ListFile = FSO.OpenTextFile(WScript.Arguments(0), 1)
Do While Not ListFile.AtEndOfStream
Call DoItForThisFile(ListFile.ReadLine)
Loop
ListFile.Close
Set ListFile = Nothing
Set F = Nothing
Set FSO = Nothing
MsgBox "Поиск с заменой завершен!", vbInformation, "Поиск и замена"
WScript.Quit
Sub DoItForThisFile(FilePath)
Set F = FSO.OpenTextFile(FilePath, ForReading)
Buffer = F.ReadAll
F.Close
Found = InStr(1, Buffer, Find_String, 1)
If Found <> 0 Then
Buffer = Replace(CStr(Buffer), Find_String, Replace_String,1,-1,1)
'FSO.CopyFile FilePath, FilePath & ".bak"
Set F = FSO.OpenTextFile(FilePath, ForWriting)
F.Write Buffer
F.Close
End If
End Sub
'=========================[ End of file ]=========================
Последний раз редактировалось Volniy Чт окт 30, 2008 00:40, всего редактировалось 8 раз.
Минуточку, это красиво, но задача была менять во многих файлах!
А тут насколько я понял один файл берется... цикл нужен.
Проверка показала что моя прога каким-то образом пропускает файлы некоторые...
нужен ремонт.
Буфер поддерживаю это красивей значительно. Но без цикла никак. у меня энтих файлов 15000.
Где почитать про параметры вызова? не смог найти.
А тут насколько я понял один файл берется... цикл нужен.
Проверка показала что моя прога каким-то образом пропускает файлы некоторые...
Буфер поддерживаю это красивей значительно. Но без цикла никак. у меня энтих файлов 15000.
Где почитать про параметры вызова? не смог найти.
Последний раз редактировалось Zergal Ср ноя 25, 2009 17:01, всего редактировалось 1 раз.
Вот теперь кррасота! Полейзнейшая вещь имхо. Маглобт.Volniy писал(а):Ну нужен, так нужен. "КАкие прАблемы"(с)
Добавил цикл (исправил код в первом сообщении). Оно?
Последний раз редактировалось Zergal Ср ноя 25, 2009 13:49, всего редактировалось 3 раза.
На руборде в скриптик добавили поддержку регэкспов.
Я по ctrl+b в директории с кучей вложенных директорий показываю все файлы, потом их фильтрую по ctrl+F12 с помощью сохраненного регулярного выражения. Меня интересует вопрос: как узнать количество оставшихся файлов и занести это число в переменную?
Когда все выделяю - снизу отображается кол-во выделенных файлов, но как-бы это число вытащить?
Я сложным замученым методом через архивацию в lst узнаю это число, но когда его копирую, почему-то не могу вставить. Пробовал посмотреть значение GetTextFromClip в попапе - выдает пустую строку.
Пользуюсь Хелпером бета7 и писал js-скрипт. Может, для Хелпера нужно обязательно vbs?
Да, все-таки, основной мой вопрос - как затащить в переменную количество выделенных файлов?
Когда все выделяю - снизу отображается кол-во выделенных файлов, но как-бы это число вытащить?
Я сложным замученым методом через архивацию в lst узнаю это число, но когда его копирую, почему-то не могу вставить. Пробовал посмотреть значение GetTextFromClip в попапе - выдает пустую строку.
Пользуюсь Хелпером бета7 и писал js-скрипт. Может, для Хелпера нужно обязательно vbs?
Да, все-таки, основной мой вопрос - как затащить в переменную количество выделенных файлов?
js-файл:
Код: Выделить всё
/* ====================================
Подсчет количества выделенных файлов
Параметры вызова из TC:
%L
==================================== */
var objArgs, FSO, TextFile, i = 0;
objArgs = WScript.Arguments;
FSO = new ActiveXObject("Scripting.FileSystemObject");
TextFile = FSO.OpenTextFile(objArgs(0));
while (!TextFile.AtEndOfStream)
{
i++;
TextFile.SkipLine();
}
TextFile.Close();
WScript.Echo("Выделено " + i + " файлов");