View previous topic :: View next topic |
Author |
Message |
LocKtaR-o-DarK
Joined: 12 Aug 2005 Posts: 349 Location: Москва
|
(Separately) Posted: Sat Dec 03, 2005 05:12 Post subject: |
|
|
необходимо поменять кодировку с cp_1252 на cp_1251, 1)используя редактор реестра (для продвинутых), 2)скачав с нета готовые *.reg или *.exe файлы или 3)пользуясь различными твикерами, мне больше всего по душе знаменитый xptweacker, на xp и xpsp1 все корректно, в xpsp2 уже есть несколько неточностей (проверял лично), но большинство настроек выполняет неплохо даже в сп2 об этом уже давно всем известно господа, инет полон инфы об этом, так что ищем поиском |
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Sat Dec 03, 2005 15:15 Post subject: |
|
|
LocKtaR-o-DarK wrote: | ...об этом уже давно всем известно господа, инет полон инфы об этом, так что ищем поиском |
От того, каким именно способом ты изменишь запись в Реестре (хоть твикером, хоть рег-файлом, хоть даже прямым редактированием бинарных файлов реестра из другой операционной системы ), суть все равно не меняется. Я не сказал, что я не знаю что нужно изменить, я сказал, что это не очень-то правильный способ, потому как затрагивает абсолютно все программы, написанные из расчета на кодировку 1252 (Latin). Например, про немецкие умляуты можно забыть - вместо них будут русские буквы. Да мало ли чего еще может случиться в таких программах.
Это - кривой способ. |
|
Back to top |
|
|
KPOBABAK
Joined: 18 Jan 2005 Posts: 10
|
(Separately) Posted: Tue Dec 27, 2005 19:50 Post subject: |
|
|
[quote=
Это - кривой способ.[/quote]
согласен на 100% в одном месте исправляет в другом портит. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Fri Apr 14, 2006 16:31 Post subject: |
|
|
Вот подумал, что может кому-нить пригодится...
На старом форуме появилась задача по поиску и замене текста в выделенных файлах:
Quote: | 1. выделяем файлы для редактирования
2. жмем сочетание клавиш (т.е. запускаем плагин) и в появившемся маленьком поле ввода пишем то, что нужно найти и заменить. Жмем ок.
3. в появившемся после этого окне пишем то, НА чТО надо заменить. Жмем ок. |
Написал vbs-скрипт, использующий EmEditor (версия EmEditor-а - 4.13, не знаю, как на пятерке работать будет):
Code: | '==================================================================
' Поиск и замена строк в выделенных файлах в 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.Quit |
|
|
Back to top |
|
|
Zergal
Joined: 16 May 2006 Posts: 4
|
(Separately) Posted: Tue May 16, 2006 14:53 Post subject: |
|
|
2Volniy - спасибо за прогу, люблю новые идеи.
2Batya
Наверно вызываю неверно -как правильно прикрутить к total'у?
я сунул в панель, мышой тащу туда файлы, в итоге цикл идёт по строчкам а не по файлам...
поясни непонятливому фразу:
' В параметрах вызова из TC должно быть прописано:
' %L
PS в итоге просто иконку сделал "C:\Program Files\EmEditor\emeditor.exe" /rd
Last edited by Zergal on Wed Nov 25, 2009 18:20; edited 1 time in total |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue May 16, 2006 15:10 Post subject: |
|
|
Zergal
Сохраняем код в файл, например, ReplaceInFiles.vbs.
В этом файле меняем "d:\Program Files\EmEditor\emeditor.exe" на "C:\Program Files\EmEditor\emeditor.exe" (твой путь).
Делаем кнопку вида (скопируй код, нажми прав. кнопку мыши на панели и скажи "Вставить"):
Code: | TOTALCMD#BAR#DATA
d:\WHS\ReplaceInFiles.vbs
%L
shell32.dll,22
Поиск и замена в файлах
-1
|
Измени кнопку - поменяй путь к ReplaceInFiles.vbs на свой.
Как работает.
1. Выделяешь файлы.
2. Нажимаешь кнопку.
3. В появившемся окне пишешь то, что нужно найти и заменить. ОК.
4. В появившемся после этого окне пишешь то, НА ЧТО надо заменить. ОК. |
|
Back to top |
|
|
Zergal
Joined: 16 May 2006 Posts: 4
|
(Separately) Posted: Tue May 16, 2006 19:49 Post subject: |
|
|
Вот это мне и было нужно, спасибо.
Я чуть поменял пример из Борна, добавил Батин скрипт, взболтал но не перемешивал и получил то же но быстрее и без всяких emeditor.exe за которых между прочем бабки просят
Code: |
'**************************************************
' 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
|
ЗЫ Может сбоить на символах, которые не понимает шаблон.
Не причёсывал, лень лохматая.
Ругайтесь, мне будет приятно.
Last edited by Zergal on Wed Nov 25, 2009 09:51; edited 1 time in total |
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Tue May 16, 2006 22:28 Post subject: 4-ая редакция |
|
|
Почти то же самое, но только по-человечески
Code: | '=========================[ 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 ]========================= |
Изменил немного код, чтобы файлы, в которых разыскиваемая строка отсутствует, не перезаписывались (действительно, нах оно?).
Last edited by Volniy on Thu Oct 30, 2008 01:40; edited 8 times in total |
|
Back to top |
|
|
Zergal
Joined: 16 May 2006 Posts: 4
|
(Separately) Posted: Tue May 16, 2006 22:47 Post subject: |
|
|
Минуточку, это красиво, но задача была менять во многих файлах!
А тут насколько я понял один файл берется... цикл нужен.
Проверка показала что моя прога каким-то образом пропускает файлы некоторые... нужен ремонт.
Буфер поддерживаю это красивей значительно. Но без цикла никак. у меня энтих файлов 15000.
Где почитать про параметры вызова? не смог найти.
Last edited by Zergal on Wed Nov 25, 2009 18:01; edited 1 time in total |
|
Back to top |
|
|
Volniy
Joined: 15 Dec 2004 Posts: 585 Location: Местный
|
(Separately) Posted: Wed May 17, 2006 00:00 Post subject: |
|
|
Zergal wrote: | Минуточку, это красиво, но задача была менять во многих файлах!
А тут насколько я понял один файл берется... цикл нужен. |
Ну нужен, так нужен. "КАкие прАблемы"(с)
Добавил цикл (исправил код в первом сообщении). Оно? |
|
Back to top |
|
|
Zergal
Joined: 16 May 2006 Posts: 4
|
(Separately) Posted: Wed May 17, 2006 07:48 Post subject: |
|
|
Volniy wrote: | Ну нужен, так нужен. "КАкие прАблемы"(с)
Добавил цикл (исправил код в первом сообщении). Оно? |
Вот теперь кррасота! Полейзнейшая вещь имхо. Маглобт.
Last edited by Zergal on Wed Nov 25, 2009 14:49; edited 3 times in total |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Wed May 17, 2006 12:42 Post subject: |
|
|
Volniy
Красиво.
А у меня, видимо, клины были, что я EmEditor использовал вместо команды Replace _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
funduk
Joined: 16 Aug 2005 Posts: 1513 Location: Санкт-Петербург
|
(Separately) Posted: Wed May 31, 2006 23:59 Post subject: |
|
|
На руборде в скриптик добавили поддержку регэкспов. |
|
Back to top |
|
|
KoS
Joined: 13 Jun 2006 Posts: 9 Location: Киев
|
(Separately) Posted: Tue Jun 13, 2006 15:18 Post subject: |
|
|
Я по ctrl+b в директории с кучей вложенных директорий показываю все файлы, потом их фильтрую по ctrl+F12 с помощью сохраненного регулярного выражения. Меня интересует вопрос: как узнать количество оставшихся файлов и занести это число в переменную?
Когда все выделяю - снизу отображается кол-во выделенных файлов, но как-бы это число вытащить?
Я сложным замученым методом через архивацию в lst узнаю это число, но когда его копирую, почему-то не могу вставить. Пробовал посмотреть значение GetTextFromClip в попапе - выдает пустую строку.
Пользуюсь Хелпером бета7 и писал js-скрипт. Может, для Хелпера нужно обязательно vbs?
Да, все-таки, основной мой вопрос - как затащить в переменную количество выделенных файлов? |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Tue Jun 13, 2006 17:02 Post subject: |
|
|
js-файл:
Code: | /* ====================================
Подсчет количества выделенных файлов
Параметры вызова из 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 + " файлов"); |
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|