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 

Script Request
Goto page Previous  1, 2, 3 ... 12, 13, 14 ... 40, 41, 42  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
SVM



Joined: 16 Oct 2008
Posts: 47

Post (Separately) Posted: Wed Jan 27, 2010 13:24    Post subject: Reply with quote

Batya
Спасибо, всё работает!
Back to top
View user's profile Send private message
taravasya



Joined: 27 Mar 2010
Posts: 38

Post (Separately) Posted: Wed Mar 31, 2010 03:19    Post subject: Reply with quote

Здравствуйте. Есть пара вопросов. Я новичок, и слабовато разбираюсь. Но пытаюсь...
Вот тут
http://forum.wincmd.ru/viewpost.php?p=14843
Я позаимствовал прекрасный скрипт.
Некоторое время он прослужил мне "по-полной" однако сейчас я столкнулся с проблемой.
Дело в том что искомый текст стал варьироваться. Причём заранее я не знаю каким он будет. И файлов много.. А все их надо подгонять под одну черту. (искомый текст хранится в XML файле, под тегом code. Сам текст варьируется от 100 до 2000. Менять надо на 220)
Code:
<code>1100</code>, <code>900</code>, <code>1800</code> ==> <code>220</code>

То-есть фактически мне понадобилось добавить к скрипту регулярное выражение поиска нужного текста. Я нашёл вот такое дело:
Code:
Set myRegExp = CreateObject("VBScript.RegExp")
myRegExp.Pattern = "<code (.*)</code>"

В отладчике, с подставленным текстом для поиска, вроде работает. Но как я не бился над ними, не сумел по-человечески подвязать их к выше упомянутому скрипту... Помогите пожалуйста. Confused
PS: Он же собственно второй вопрос. Мне было бы очень удобно, если-бы я мог выделить папку(в каждой папке содержится один такой файл который надо править), и после этого запустить скрипт. Таким образом изменив файл находящийся внутри папки. Правка по-одному файлу меня устроит.
Прошу прощения за сумбурность. Пробился почти сутки с этими скриптами, и сейчас уже по сути засыпая пишу запрос. Если чего не понятно объяснил скажите я постараюсь разложить по-полочкам завтра утром....
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Wed Mar 31, 2010 10:06    Post subject: Reply with quote

taravasya wrote:
То-есть фактически мне понадобилось добавить к скрипту регулярное выражение поиска нужного текста.
taravasya wrote:
Мне было бы очень удобно, если-бы я мог выделить папку(в каждой папке содержится один такой файл который надо править), и после этого запустить скрипт. Таким образом изменив файл находящийся внутри папки. Правка по-одному файлу меня устроит.

vbs-скрипт работает по одному файлу:
Code:
'===============================================
' Замена текста в файле с помощью рег. выражений
'
' Параметры:
' {файл} {текст для поиска} {текст для замены}
'===============================================
Option Explicit
Dim FSO, F, Str1, Str2, Text
Set FSO = CreateObject("Scripting.FileSystemObject")
With WScript
  F    = .Arguments(0)
  Str1 = .Arguments(1)
  Str2 = .Arguments(2)
End With
F = FSO.GetAbsolutePathName(CreateObject("WScript.Shell").ExpandEnvironmentStrings(F))

Text = FSO.OpenTextFile(F, 1).ReadAll
Text = RegExpReplace(Text, Str1, Str2)
FSO.OpenTextFile(F, 2).Write Text

Set FSO = Nothing
WScript.Quit 0

'Функция замены с помощью регулярных выражений
Function RegExpReplace(pText, pFindStr, pNewStr)
  Dim regEx
  Set regEx        = New RegExp
  regEx.Pattern    = pFindStr
  regEx.IgnoreCase = True
  regEx.Global     = True
  RegExpReplace    = regEx.Replace(pText, pNewStr)
  Set regEx        = Nothing
End Function

Твоя кнопка:
Quote:
TOTALCMD#BAR#DATA
"%Commander_Path%\Utils\WHS\RegExpReplaceText.vbs"
"%p%n\Обрабатываемый файл.EXT" "<code>\d+</code>" "<code>220</code>"
%Commander_Path%\WCMICONS.DLL,14
Замена текста в файле с помощью рег. выражений



-1
Синий, зелёный, красный - подставляй собственные значения. Работает для текущей папки (под курсором).
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
taravasya



Joined: 27 Mar 2010
Posts: 38

Post (Separately) Posted: Thu Apr 01, 2010 11:07    Post subject: Reply with quote

Спасибо огромное! Это то что нужно. Very Happy
Вообще молодец Вы, Batya.....
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Mon May 03, 2010 13:43    Post subject: Reply with quote

В нескольких темах форума встречается скрипты создающие файл из буфера обмена, я постоянно одним из них пользуюсь, но появились предложения по улучшению
1. В параметрах скрипта три параметра {путь} {имя файла} {расширение}
2. Скрипт бы проверял, если есть подобный файл в папке, то добавлял к файлу 01,02,03...
3. Это может касается не этой темы, интересует создание файла doc, docx, xls, xlsx с содержимым из буфера обмена
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Tue May 04, 2010 16:47    Post subject: Reply with quote

Andrey_A wrote:
В нескольких темах форума встречается скрипты

Нужно править каждый скрипт, поэтому подними темы, где эти скрипты приведены.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Wed May 05, 2010 01:18    Post subject: Reply with quote

Quote:
где эти скрипты приведены

вот одна из ссылок:
создание файла из буфера обмена
а вот другой скрипт, его я тоже взял с форума, но ссылку найти не смог:
Code:
' Создаёт в текущем каталоге файл из буфера обмена
' Параметр "%PBuffer.txt"
CreateObject("Scripting.FileSystemObject").OpenTextFile(Wscript.Arguments(0),8,1).Write vbCrLf&CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")&vbCrLf&vbCrLf

Править нужно не все скрипты, а хотя бы один с условиями 1,2
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Wed May 05, 2010 10:21    Post subject: Reply with quote

Andrey_A wrote:
вот одна из ссылок:
создание файла из буфера обмена

Code:
'==========================================================
' Создание текстового файла с содержимым буфера обмена
'   по маске: имя_номер.расширение
'
' Параметры:
' {создаваемый файл} [{минимальное количество цифр номера}]
'==========================================================
Option Explicit
'====== Изменяемые параметры ==============================
Const IsQuestion = True 'Запрос на создание
'==========================================================
Dim FileName, Rank, Clip, NewPath, FSO, WSH, Mess, Title
FileName = WScript.Arguments(0)
If WScript.Arguments.Count > 1 Then
  Rank   = WScript.Arguments(1)
Else
  Rank   = 1
End If
Set FSO  = CreateObject("Scripting.FileSystemObject")
Set WSH  = CreateObject("WScript.Shell")
Clip     = CreateObject("TCScript.Helper").GetTextFromClip

If Len(Clip) = 0 Then Quit

NewPath = NextName(GetPath(FileName))

If IsQuestion Then
  Mess = "Буфер обмена содержит текст. Создать файл" & vbNewLine &_
         """" & NewPath & """"                       & vbNewLine &_
         "с содержимым буфера обмена?"               & vbNewLine
  Title = "Создание текстового файла"
  If MsgBox(Mess, vbYesNo + vbQuestion, Title) = 7 Then Quit
End If

FSO.OpenTextFile(NewPath, 2, True).Write Clip

Quit

Function Quit
  Set WSH = Nothing
  Set FSO = Nothing
  WScript.Quit
End Function

Function NextName(pFilePath)
  Dim lPath, lName, lExt, li, lNum, lDlm, lNewPath
  lDlm  = "_"
  lPath = FSO.GetParentFolderName(pFilePath)
  lName = FSO.GetBaseName(pFilePath)
  lExt  = FSO.GetExtensionName(pFilePath)
  If Len(lPath) > 0 Then lPath = lPath & "\"
  If Not FSO.FileExists(pFilePath) Then
    NextName = pFilePath
    Exit Function
  End If
  Do
    li = li + 1
    If li < 10^Rank Then
      lNum = Right(String(Rank, "0") & li, Rank)
    Else
      lNum = li
    End If
    lNewPath = lPath & lName & lDlm & lNum & "." & lExt
  Loop While FSO.FileExists(lNewPath)
  NextName = lNewPath
End Function

Function GetPath(pPath)
  GetPath = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(pPath))
End Function

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Wed May 05, 2010 11:15    Post subject: Reply with quote

Andrey_A wrote:
а вот другой скрипт, его я тоже взял с форума, но ссылку найти не смог:Код:
' Создаёт в текущем каталоге файл из буфера обмена
' Параметр "%PBuffer.txt"
CreateObject("Scripting.FileSystemObject").OpenTextFile(Wscript.Arguments(0),8,1).Write vbCrLf&CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")&vbCrLf&vbCrLf

Это, в принципе, то же самое.
Основная фишка - TCScript.Helper не используется:
Code:
'==========================================================
' Создание текстового файла с содержимым буфера обмена
'   по маске: имя_номер.расширение
'
' Параметры:
' {создаваемый файл} [{минимальное количество цифр номера}]
'==========================================================
Option Explicit
'====== Изменяемые параметры ==============================
Const IsQuestion = True 'Запрос на создание
'==========================================================
Dim FileName, Rank, Clip, NewPath, FSO, WSH, Mess, Title
FileName = WScript.Arguments(0)
If WScript.Arguments.Count > 1 Then
  Rank   = WScript.Arguments(1)
Else
  Rank   = 1
End If
Set FSO  = CreateObject("Scripting.FileSystemObject")
Set WSH  = CreateObject("WScript.Shell")
Clip     = CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")

If Len(Clip) = 0 Or IsNull(Clip) Then Quit

NewPath = NextName(GetPath(FileName))

If IsQuestion Then
  Mess = "Буфер обмена содержит текст. Создать файл" & vbNewLine &_
         """" & NewPath & """"                       & vbNewLine &_
         "с содержимым буфера обмена?"               & vbNewLine
  Title = "Создание текстового файла"
  If MsgBox(Mess, vbYesNo + vbQuestion, Title) = 7 Then Quit
End If

FSO.OpenTextFile(NewPath, 2, True).Write Clip

Quit

Function Quit
  Set WSH = Nothing
  Set FSO = Nothing
  WScript.Quit
End Function

Function NextName(pFilePath)
  Dim lPath, lName, lExt, li, lNum, lDlm, lNewPath
  lDlm  = "_"
  lPath = FSO.GetParentFolderName(pFilePath)
  lName = FSO.GetBaseName(pFilePath)
  lExt  = FSO.GetExtensionName(pFilePath)
  If Len(lPath) > 0 Then lPath = lPath & "\"
  If Not FSO.FileExists(pFilePath) Then
    NextName = pFilePath
    Exit Function
  End If
  Do
    li = li + 1
    If li < 10^Rank Then
      lNum = Right(String(Rank, "0") & li, Rank)
    Else
      lNum = li
    End If
    lNewPath = lPath & lName & lDlm & lNum & "." & lExt
  Loop While FSO.FileExists(lNewPath)
  NextName = lNewPath
End Function

Function GetPath(pPath)
  GetPath = FSO.GetAbsolutePathName(WSH.ExpandEnvironmentStrings(pPath))
End Function

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Wed May 05, 2010 15:43    Post subject: Reply with quote

Спасибо Batya! Всё очень шикарно - быстро и функционально!
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Fri May 07, 2010 01:13    Post subject: Reply with quote

Периодически приходится в файлах делать несколько замен и причом не одну, я пользуюсь скриптом из темы
http://forum.wincmd.ru/viewtopic.php?t=13153&start=15&postdays=0&postorder=asc&highlight=

, нельзя ли сделать серию замен или поиск и замена будут записаны в файле - пунктуация любая, может так,
"строка поиска1" "замена1"
"строка поиска2" "замена2"
"строка поиска3" "замена3"
...
т.е. поиск и замена в выделенных файлов по строчному списку поиска и замен из файла...
Back to top
View user's profile Send private message
AlexTex



Joined: 10 Jul 2008
Posts: 42

Post (Separately) Posted: Mon May 10, 2010 03:40    Post subject: Reply with quote

Batya
Скрипт - супер! Огромное спасибо! Very Happy
P.S. А можно сделать так, чтобы не выскакивало окошко "Буфер обмена содержит текст...", а сразу создавался файл?
Пробовал убрать блок "If IsQuestion Then", файл создается, но появляется только после принудительного перечитывания панели Sad
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Mon May 10, 2010 06:49    Post subject: Reply with quote

AlexTex wrote:
А можно сделать так, чтобы не выскакивало окошко "Буфер обмена содержит текст...", а сразу создавался файл?
Это делается изменением строки Const IsQuestion = False 'Запрос на создание

AlexTex wrote:
файл создается, но появляется только после принудительного перечитывания панели
Настройка –> Автообновление. Проверь галки.
Back to top
View user's profile Send private message
AlexTex



Joined: 10 Jul 2008
Posts: 42

Post (Separately) Posted: Tue May 11, 2010 12:26    Post subject: Reply with quote

Tol!k, уточни, плиз, где прописать False, поскольку строки Const IsQuestion нет, а "метод тыка" не срабатывает - выдает ошибку "Имя было переопределено".
Code:
If IsQuestion Then
  Mess = "Буфер обмена содержит текст. Создать файл" & vbNewLine &_
         """" & NewPath & """"                       & vbNewLine &_
         "с содержимым буфера обмена?"               & vbNewLine
  Title = "Создание текстового файла"
  If MsgBox(Mess, vbYesNo + vbQuestion, Title) = 7 Then Quit
End If
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Tue May 11, 2010 13:22    Post subject: Reply with quote

AlexTex wrote:
Tol!k, уточни, плиз, где прописать False, поскольку строки Const IsQuestion нет

В шапке скрипта:
Quote:
'====== Изменяемые параметры ==============================
Const IsQuestion = False 'Запрос на создание
'==========================================================

_________________
Нет, я не сплю. Я просто медленно моргаю.
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 ... 12, 13, 14 ... 40, 41, 42  Next
Page 13 of 42

 
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