Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Windows Script Host
Goto page Previous  1, 2, 3, 4, 5 ... 24, 25, 26  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
LocKtaR-o-DarK



Joined: 12 Aug 2005
Posts: 347
Location: Москва

Post (Separately) Posted: Sat Dec 03, 2005 05:12    Post subject: Reply with quote

необходимо поменять кодировку с cp_1252 на cp_1251, 1)используя редактор реестра (для продвинутых), 2)скачав с нета готовые *.reg или *.exe файлы или 3)пользуясь различными твикерами, мне больше всего по душе знаменитый xptweacker, на xp и xpsp1 все корректно, в xpsp2 уже есть несколько неточностей (проверял лично), но большинство настроек выполняет неплохо даже в сп2 об этом уже давно всем известно господа, инет полон инфы об этом, так что ищем поиском
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Sat Dec 03, 2005 15:15    Post subject: Reply with quote

LocKtaR-o-DarK wrote:
...об этом уже давно всем известно господа, инет полон инфы об этом, так что ищем поиском


От того, каким именно способом ты изменишь запись в Реестре (хоть твикером, хоть рег-файлом, хоть даже прямым редактированием бинарных файлов реестра из другой операционной системы Shocked ), суть все равно не меняется. Я не сказал, что я не знаю что нужно изменить, я сказал, что это не очень-то правильный способ, потому как затрагивает абсолютно все программы, написанные из расчета на кодировку 1252 (Latin). Например, про немецкие умляуты можно забыть - вместо них будут русские буквы. Да мало ли чего еще может случиться в таких программах.
Это - кривой способ.
Back to top
View user's profile Send private message
KPOBABAK



Joined: 18 Jan 2005
Posts: 10

Post (Separately) Posted: Tue Dec 27, 2005 19:50    Post subject: Reply with quote

[quote=
Это - кривой способ.[/quote]

согласен на 100% в одном месте исправляет в другом портит.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2200
Location: Москва, Россия

Post (Separately) Posted: Fri Apr 14, 2006 16:31    Post subject: Reply with quote

Вот подумал, что может кому-нить пригодится...
На старом форуме появилась задача по поиску и замене текста в выделенных файлах:
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
View user's profile Send private message
Zergal



Joined: 16 May 2006
Posts: 4

Post (Separately) Posted: Tue May 16, 2006 14:53    Post subject: Reply with quote

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
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2200
Location: Москва, Россия

Post (Separately) Posted: Tue May 16, 2006 15:10    Post subject: Reply with quote

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
View user's profile Send private message
Zergal



Joined: 16 May 2006
Posts: 4

Post (Separately) Posted: Tue May 16, 2006 19:49    Post subject: Reply with quote

Вот это мне и было нужно, спасибо.
Я чуть поменял пример из Борна, добавил Батин скрипт, взболтал но не перемешивал и получил то же но быстрее и без всяких 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
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Tue May 16, 2006 22:28    Post subject: 4-ая редакция Reply with quote

Почти то же самое, но только по-человечески 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
Back to top
View user's profile Send private message
Zergal



Joined: 16 May 2006
Posts: 4

Post (Separately) Posted: Tue May 16, 2006 22:47    Post subject: Reply with quote

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


Last edited by Zergal on Wed Nov 25, 2009 18:01; edited 1 time in total
Back to top
View user's profile Send private message
Volniy



Joined: 15 Dec 2004
Posts: 585
Location: Местный

Post (Separately) Posted: Wed May 17, 2006 00:00    Post subject: Reply with quote

Zergal wrote:
Минуточку, это красиво, но задача была менять во многих файлах!
А тут насколько я понял один файл берется... цикл нужен.

Ну нужен, так нужен. "КАкие прАблемы"(с)
Добавил цикл (исправил код в первом сообщении). Оно?
Back to top
View user's profile Send private message
Zergal



Joined: 16 May 2006
Posts: 4

Post (Separately) Posted: Wed May 17, 2006 07:48    Post subject: Reply with quote

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

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


Last edited by Zergal on Wed Nov 25, 2009 14:49; edited 3 times in total
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2200
Location: Москва, Россия

Post (Separately) Posted: Wed May 17, 2006 12:42    Post subject: Reply with quote

Volniy
Красиво.
А у меня, видимо, клины были, что я EmEditor использовал вместо команды Replace Very Happy
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
funduk



Joined: 16 Aug 2005
Posts: 1511
Location: Санкт-Петербург

Post (Separately) Posted: Wed May 31, 2006 23:59    Post subject: Reply with quote

На руборде в скриптик добавили поддержку регэкспов.
Back to top
View user's profile Send private message
KoS



Joined: 13 Jun 2006
Posts: 9
Location: Киев

Post (Separately) Posted: Tue Jun 13, 2006 15:18    Post subject: Reply with quote

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

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

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

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

Да, все-таки, основной мой вопрос - как затащить в переменную количество выделенных файлов?
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2200
Location: Москва, Россия

Post (Separately) Posted: Tue Jun 13, 2006 17:02    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, 4, 5 ... 24, 25, 26  Next
Page 4 of 26

 
Jump to:  
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