Windows Script Host
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3, 4, 5 ... 25, 26, 27  Next  :| |:
Total Commander -> Автоматизация Total Commander

#46:  Author: LocKtaR-o-DarKLocation: Москва PostPosted: Sat Dec 03, 2005 05:12
    —
необходимо поменять кодировку с cp_1252 на cp_1251, 1)используя редактор реестра (для продвинутых), 2)скачав с нета готовые *.reg или *.exe файлы или 3)пользуясь различными твикерами, мне больше всего по душе знаменитый xptweacker, на xp и xpsp1 все корректно, в xpsp2 уже есть несколько неточностей (проверял лично), но большинство настроек выполняет неплохо даже в сп2 об этом уже давно всем известно господа, инет полон инфы об этом, так что ищем поиском

#47:  Author: VolniyLocation: Местный PostPosted: Sat Dec 03, 2005 15:15
    —
LocKtaR-o-DarK wrote:
...об этом уже давно всем известно господа, инет полон инфы об этом, так что ищем поиском


От того, каким именно способом ты изменишь запись в Реестре (хоть твикером, хоть рег-файлом, хоть даже прямым редактированием бинарных файлов реестра из другой операционной системы Shocked ), суть все равно не меняется. Я не сказал, что я не знаю что нужно изменить, я сказал, что это не очень-то правильный способ, потому как затрагивает абсолютно все программы, написанные из расчета на кодировку 1252 (Latin). Например, про немецкие умляуты можно забыть - вместо них будут русские буквы. Да мало ли чего еще может случиться в таких программах.
Это - кривой способ.

#48:  Author: KPOBABAK PostPosted: Tue Dec 27, 2005 19:50
    —
[quote=
Это - кривой способ.[/quote]

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

#49:  Author: BatyaLocation: Москва, Россия PostPosted: Fri Apr 14, 2006 16:31
    —
Вот подумал, что может кому-нить пригодится...
На старом форуме появилась задача по поиску и замене текста в выделенных файлах:
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

#50:  Author: Zergal PostPosted: Tue May 16, 2006 14:53
    —
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

#51:  Author: BatyaLocation: Москва, Россия PostPosted: Tue May 16, 2006 15:10
    —
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. В появившемся после этого окне пишешь то, НА ЧТО надо заменить. ОК.

#52:  Author: Zergal PostPosted: Tue May 16, 2006 19:49
    —
Вот это мне и было нужно, спасибо.
Я чуть поменял пример из Борна, добавил Батин скрипт, взболтал но не перемешивал и получил то же но быстрее и без всяких emeditor.exe за которых между прочем бабки просят Wink
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

#53: 4-ая редакция Author: VolniyLocation: Местный PostPosted: Tue May 16, 2006 22:28
    —
Почти то же самое, но только по-человечески Wink
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

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


Last edited by Zergal on Wed Nov 25, 2009 18:01; edited 1 time in total

#55:  Author: VolniyLocation: Местный PostPosted: Wed May 17, 2006 00:00
    —
Zergal wrote:
Минуточку, это красиво, но задача была менять во многих файлах!
А тут насколько я понял один файл берется... цикл нужен.

Ну нужен, так нужен. "КАкие прАблемы"(с)
Добавил цикл (исправил код в первом сообщении). Оно?

#56:  Author: Zergal PostPosted: Wed May 17, 2006 07:48
    —
Volniy wrote:
Ну нужен, так нужен. "КАкие прАблемы"(с)
Добавил цикл (исправил код в первом сообщении). Оно?

Вот теперь кррасота! Полейзнейшая вещь имхо. Маглобт.


Last edited by Zergal on Wed Nov 25, 2009 14:49; edited 3 times in total

#57:  Author: BatyaLocation: Москва, Россия PostPosted: Wed May 17, 2006 12:42
    —
Volniy
Красиво.
А у меня, видимо, клины были, что я EmEditor использовал вместо команды Replace Very Happy

#58:  Author: fundukLocation: Санкт-Петербург PostPosted: Wed May 31, 2006 23:59
    —
На руборде в скриптик добавили поддержку регэкспов.

#59:  Author: KoSLocation: Киев PostPosted: Tue Jun 13, 2006 15:18
    —
Я по ctrl+b в директории с кучей вложенных директорий показываю все файлы, потом их фильтрую по ctrl+F12 с помощью сохраненного регулярного выражения. Меня интересует вопрос: как узнать количество оставшихся файлов и занести это число в переменную?

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

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

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

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

#60:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Jun 13, 2006 17:02
    —
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 + " файлов");



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2, 3, 4, 5 ... 25, 26, 27  Next  :| |:
Page 4 of 27

Powered by phpBB © 2001, 2005 phpBB Group