Страница 4 из 27

Добавлено: Сб дек 03, 2005 04:12
LocKtaR-o-DarK
необходимо поменять кодировку с cp_1252 на cp_1251, 1)используя редактор реестра (для продвинутых), 2)скачав с нета готовые *.reg или *.exe файлы или 3)пользуясь различными твикерами, мне больше всего по душе знаменитый xptweacker, на xp и xpsp1 все корректно, в xpsp2 уже есть несколько неточностей (проверял лично), но большинство настроек выполняет неплохо даже в сп2 об этом уже давно всем известно господа, инет полон инфы об этом, так что ищем поиском

Добавлено: Сб дек 03, 2005 14:15
Volniy
LocKtaR-o-DarK писал(а):...об этом уже давно всем известно господа, инет полон инфы об этом, так что ищем поиском
От того, каким именно способом ты изменишь запись в Реестре (хоть твикером, хоть рег-файлом, хоть даже прямым редактированием бинарных файлов реестра из другой операционной системы :shock: ), суть все равно не меняется. Я не сказал, что я не знаю что нужно изменить, я сказал, что это не очень-то правильный способ, потому как затрагивает абсолютно все программы, написанные из расчета на кодировку 1252 (Latin). Например, про немецкие умляуты можно забыть - вместо них будут русские буквы. Да мало ли чего еще может случиться в таких программах.
Это - кривой способ.

Добавлено: Вт дек 27, 2005 18:50
KPOBABAK
[quote=
Это - кривой способ.[/quote]

согласен на 100% в одном месте исправляет в другом портит.

Добавлено: Пт апр 14, 2006 16:31
Batya
Вот подумал, что может кому-нить пригодится...
На старом форуме появилась задача по поиску и замене текста в выделенных файлах:
1. выделяем файлы для редактирования
2. жмем сочетание клавиш (т.е. запускаем плагин) и в появившемся маленьком поле ввода пишем то, что нужно найти и заменить. Жмем ок.
3. в появившемся после этого окне пишем то, НА чТО надо заменить. Жмем ок.
Написал vbs-скрипт, использующий EmEditor (версия EmEditor-а - 4.13, не знаю, как на пятерке работать будет):

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

'==================================================================
' Поиск и замена строк в выделенных файлах в 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

Добавлено: Вт май 16, 2006 14:53
Zergal
2Volniy - спасибо за прогу, люблю новые идеи.

2Batya
Наверно вызываю неверно -как правильно прикрутить к total'у?
я сунул в панель, мышой тащу туда файлы, в итоге цикл идёт по строчкам а не по файлам...
поясни непонятливому фразу:
' В параметрах вызова из TC должно быть прописано:
' %L

PS в итоге просто иконку сделал "C:\Program Files\EmEditor\emeditor.exe" /rd

Добавлено: Вт май 16, 2006 15:10
Batya
Zergal
Сохраняем код в файл, например, 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
Измени кнопку - поменяй путь к ReplaceInFiles.vbs на свой.

Как работает.
1. Выделяешь файлы.
2. Нажимаешь кнопку.
3. В появившемся окне пишешь то, что нужно найти и заменить. ОК.
4. В появившемся после этого окне пишешь то, НА ЧТО надо заменить. ОК.

Добавлено: Вт май 16, 2006 19:49
Zergal
Вот это мне и было нужно, спасибо.
Я чуть поменял пример из Борна, добавил Батин скрипт, взболтал но не перемешивал и получил то же но быстрее и без всяких emeditor.exe за которых между прочем бабки просят :wink:

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

'**************************************************
' 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

ЗЫ Может сбоить на символах, которые не понимает шаблон.
Не причёсывал, лень лохматая.
Ругайтесь, мне будет приятно.

4-ая редакция

Добавлено: Вт май 16, 2006 22:28
Volniy
Почти то же самое, но только по-человечески :wink:

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

'=========================[ 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  ]=========================
Изменил немного код, чтобы файлы, в которых разыскиваемая строка отсутствует, не перезаписывались (действительно, нах оно?).

Добавлено: Вт май 16, 2006 22:47
Zergal
Минуточку, это красиво, но задача была менять во многих файлах!
А тут насколько я понял один файл берется... цикл нужен.
Проверка показала что моя прога каким-то образом пропускает файлы некоторые... :( нужен ремонт.
Буфер поддерживаю это красивей значительно. Но без цикла никак. у меня энтих файлов 15000.
Где почитать про параметры вызова? не смог найти.

Добавлено: Ср май 17, 2006 00:00
Volniy
Zergal писал(а):Минуточку, это красиво, но задача была менять во многих файлах!
А тут насколько я понял один файл берется... цикл нужен.
Ну нужен, так нужен. "КАкие прАблемы"(с)
Добавил цикл (исправил код в первом сообщении). Оно?

Добавлено: Ср май 17, 2006 07:48
Zergal
Volniy писал(а):Ну нужен, так нужен. "КАкие прАблемы"(с)
Добавил цикл (исправил код в первом сообщении). Оно?
Вот теперь кррасота! Полейзнейшая вещь имхо. Маглобт.

Добавлено: Ср май 17, 2006 12:42
Batya
Volniy
Красиво.
А у меня, видимо, клины были, что я EmEditor использовал вместо команды Replace :D

Добавлено: Ср май 31, 2006 23:59
funduk
На руборде в скриптик добавили поддержку регэкспов.

Добавлено: Вт июн 13, 2006 15:18
KoS
Я по ctrl+b в директории с кучей вложенных директорий показываю все файлы, потом их фильтрую по ctrl+F12 с помощью сохраненного регулярного выражения. Меня интересует вопрос: как узнать количество оставшихся файлов и занести это число в переменную?

Когда все выделяю - снизу отображается кол-во выделенных файлов, но как-бы это число вытащить?

Я сложным замученым методом через архивацию в lst узнаю это число, но когда его копирую, почему-то не могу вставить. Пробовал посмотреть значение GetTextFromClip в попапе - выдает пустую строку.

Пользуюсь Хелпером бета7 и писал js-скрипт. Может, для Хелпера нужно обязательно vbs?

Да, все-таки, основной мой вопрос - как затащить в переменную количество выделенных файлов?

Добавлено: Вт июн 13, 2006 17:02
Batya
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 + " файлов");