View previous topic :: View next topic |
Author |
Message |
SVM
Joined: 16 Oct 2008 Posts: 47
|
(Separately) Posted: Wed Jan 27, 2010 13:24 Post subject: |
|
|
Batya
Спасибо, всё работает! |
|
Back to top |
|
 |
taravasya
Joined: 27 Mar 2010 Posts: 38
|
(Separately) Posted: Wed Mar 31, 2010 03:19 Post subject: |
|
|
Здравствуйте. Есть пара вопросов. Я новичок, и слабовато разбираюсь. Но пытаюсь...
Вот тут
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>" |
В отладчике, с подставленным текстом для поиска, вроде работает. Но как я не бился над ними, не сумел по-человечески подвязать их к выше упомянутому скрипту... Помогите пожалуйста.
PS: Он же собственно второй вопрос. Мне было бы очень удобно, если-бы я мог выделить папку(в каждой папке содержится один такой файл который надо править), и после этого запустить скрипт. Таким образом изменив файл находящийся внутри папки. Правка по-одному файлу меня устроит.
Прошу прощения за сумбурность. Пробился почти сутки с этими скриптами, и сейчас уже по сути засыпая пишу запрос. Если чего не понятно объяснил скажите я постараюсь разложить по-полочкам завтра утром.... |
|
Back to top |
|
 |
Batya

Joined: 15 Dec 2004 Posts: 2227 Location: Москва, Россия
|
(Separately) Posted: Wed Mar 31, 2010 10:06 Post subject: |
|
|
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 |
|
 |
taravasya
Joined: 27 Mar 2010 Posts: 38
|
(Separately) Posted: Thu Apr 01, 2010 11:07 Post subject: |
|
|
Спасибо огромное! Это то что нужно.
Вообще молодец Вы, Batya..... |
|
Back to top |
|
 |
Andrey_A

Joined: 10 Apr 2009 Posts: 394 Location: Сочи
|
(Separately) Posted: Mon May 03, 2010 13:43 Post subject: |
|
|
В нескольких темах форума встречается скрипты создающие файл из буфера обмена, я постоянно одним из них пользуюсь, но появились предложения по улучшению
1. В параметрах скрипта три параметра {путь} {имя файла} {расширение}
2. Скрипт бы проверял, если есть подобный файл в папке, то добавлял к файлу 01,02,03...
3. Это может касается не этой темы, интересует создание файла doc, docx, xls, xlsx с содержимым из буфера обмена |
|
Back to top |
|
 |
Batya

Joined: 15 Dec 2004 Posts: 2227 Location: Москва, Россия
|
(Separately) Posted: Tue May 04, 2010 16:47 Post subject: |
|
|
Andrey_A wrote: | В нескольких темах форума встречается скрипты |
Нужно править каждый скрипт, поэтому подними темы, где эти скрипты приведены. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
 |
Andrey_A

Joined: 10 Apr 2009 Posts: 394 Location: Сочи
|
(Separately) Posted: Wed May 05, 2010 01:18 Post subject: |
|
|
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 |
|
 |
Batya

Joined: 15 Dec 2004 Posts: 2227 Location: Москва, Россия
|
(Separately) Posted: Wed May 05, 2010 10:21 Post subject: |
|
|
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 |
|
 |
Batya

Joined: 15 Dec 2004 Posts: 2227 Location: Москва, Россия
|
(Separately) Posted: Wed May 05, 2010 11:15 Post subject: |
|
|
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 |
|
 |
Andrey_A

Joined: 10 Apr 2009 Posts: 394 Location: Сочи
|
(Separately) Posted: Wed May 05, 2010 15:43 Post subject: |
|
|
Спасибо Batya! Всё очень шикарно - быстро и функционально! |
|
Back to top |
|
 |
Andrey_A

Joined: 10 Apr 2009 Posts: 394 Location: Сочи
|
(Separately) Posted: Fri May 07, 2010 01:13 Post subject: |
|
|
Периодически приходится в файлах делать несколько замен и причом не одну, я пользуюсь скриптом из темы
http://forum.wincmd.ru/viewtopic.php?t=13153&start=15&postdays=0&postorder=asc&highlight=
, нельзя ли сделать серию замен или поиск и замена будут записаны в файле - пунктуация любая, может так,
"строка поиска1" "замена1"
"строка поиска2" "замена2"
"строка поиска3" "замена3"
...
т.е. поиск и замена в выделенных файлов по строчному списку поиска и замен из файла... |
|
Back to top |
|
 |
AlexTex

Joined: 10 Jul 2008 Posts: 42
|
(Separately) Posted: Mon May 10, 2010 03:40 Post subject: |
|
|
Batya
Скрипт - супер! Огромное спасибо!
P.S. А можно сделать так, чтобы не выскакивало окошко "Буфер обмена содержит текст...", а сразу создавался файл?
Пробовал убрать блок "If IsQuestion Then", файл создается, но появляется только после принудительного перечитывания панели  |
|
Back to top |
|
 |
Tol!k

Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Mon May 10, 2010 06:49 Post subject: |
|
|
AlexTex wrote: | А можно сделать так, чтобы не выскакивало окошко "Буфер обмена содержит текст...", а сразу создавался файл? | Это делается изменением строки Const IsQuestion = False 'Запрос на создание
AlexTex wrote: | файл создается, но появляется только после принудительного перечитывания панели | Настройка –> Автообновление. Проверь галки. |
|
Back to top |
|
 |
AlexTex

Joined: 10 Jul 2008 Posts: 42
|
(Separately) Posted: Tue May 11, 2010 12:26 Post subject: |
|
|
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 |
|
 |
Batya

Joined: 15 Dec 2004 Posts: 2227 Location: Москва, Россия
|
(Separately) Posted: Tue May 11, 2010 13:22 Post subject: |
|
|
AlexTex wrote: | Tol!k, уточни, плиз, где прописать False, поскольку строки Const IsQuestion нет |
В шапке скрипта:
Quote: | '====== Изменяемые параметры ==============================
Const IsQuestion = False 'Запрос на создание
'========================================================== |
_________________ Нет, я не сплю. Я просто медленно моргаю. |
|
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
|