Script Request
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Здравствуйте. Есть пара вопросов. Я новичок, и слабовато разбираюсь. Но пытаюсь...
Вот тут
http://forum.wincmd.ru/viewpost.php?p=14843
Я позаимствовал прекрасный скрипт.
Некоторое время он прослужил мне "по-полной" однако сейчас я столкнулся с проблемой.
Дело в том что искомый текст стал варьироваться. Причём заранее я не знаю каким он будет. И файлов много.. А все их надо подгонять под одну черту. (искомый текст хранится в XML файле, под тегом code. Сам текст варьируется от 100 до 2000. Менять надо на 220)
То-есть фактически мне понадобилось добавить к скрипту регулярное выражение поиска нужного текста. Я нашёл вот такое дело:
В отладчике, с подставленным текстом для поиска, вроде работает. Но как я не бился над ними, не сумел по-человечески подвязать их к выше упомянутому скрипту... Помогите пожалуйста.
PS: Он же собственно второй вопрос. Мне было бы очень удобно, если-бы я мог выделить папку(в каждой папке содержится один такой файл который надо править), и после этого запустить скрипт. Таким образом изменив файл находящийся внутри папки. Правка по-одному файлу меня устроит.
Прошу прощения за сумбурность. Пробился почти сутки с этими скриптами, и сейчас уже по сути засыпая пишу запрос. Если чего не понятно объяснил скажите я постараюсь разложить по-полочкам завтра утром....
Вот тут
http://forum.wincmd.ru/viewpost.php?p=14843
Я позаимствовал прекрасный скрипт.
Некоторое время он прослужил мне "по-полной" однако сейчас я столкнулся с проблемой.
Дело в том что искомый текст стал варьироваться. Причём заранее я не знаю каким он будет. И файлов много.. А все их надо подгонять под одну черту. (искомый текст хранится в XML файле, под тегом code. Сам текст варьируется от 100 до 2000. Менять надо на 220)
Код: Выделить всё
<code>1100</code>, <code>900</code>, <code>1800</code> ==> <code>220</code>Код: Выделить всё
Set myRegExp = CreateObject("VBScript.RegExp")
myRegExp.Pattern = "<code (.*)</code>"PS: Он же собственно второй вопрос. Мне было бы очень удобно, если-бы я мог выделить папку(в каждой папке содержится один такой файл который надо править), и после этого запустить скрипт. Таким образом изменив файл находящийся внутри папки. Правка по-одному файлу меня устроит.
Прошу прощения за сумбурность. Пробился почти сутки с этими скриптами, и сейчас уже по сути засыпая пишу запрос. Если чего не понятно объяснил скажите я постараюсь разложить по-полочкам завтра утром....
taravasya писал(а):То-есть фактически мне понадобилось добавить к скрипту регулярное выражение поиска нужного текста.
vbs-скрипт работает по одному файлу:taravasya писал(а):Мне было бы очень удобно, если-бы я мог выделить папку(в каждой папке содержится один такой файл который надо править), и после этого запустить скрипт. Таким образом изменив файл находящийся внутри папки. Правка по-одному файлу меня устроит.
Код: Выделить всё
'===============================================
' Замена текста в файле с помощью рег. выражений
'
' Параметры:
' {файл} {текст для поиска} {текст для замены}
'===============================================
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Синий, зелёный, красный - подставляй собственные значения. Работает для текущей папки (под курсором).TOTALCMD#BAR#DATA
"%Commander_Path%\Utils\WHS\RegExpReplaceText.vbs"
"%p%n\Обрабатываемый файл.EXT" "<code>\d+</code>" "<code>220</code>"
%Commander_Path%\WCMICONS.DLL,14
Замена текста в файле с помощью рег. выражений
-1
Нет, я не сплю. Я просто медленно моргаю.
В нескольких темах форума встречается скрипты создающие файл из буфера обмена, я постоянно одним из них пользуюсь, но появились предложения по улучшению
1. В параметрах скрипта три параметра {путь} {имя файла} {расширение}
2. Скрипт бы проверял, если есть подобный файл в папке, то добавлял к файлу 01,02,03...
3. Это может касается не этой темы, интересует создание файла doc, docx, xls, xlsx с содержимым из буфера обмена
1. В параметрах скрипта три параметра {путь} {имя файла} {расширение}
2. Скрипт бы проверял, если есть подобный файл в папке, то добавлял к файлу 01,02,03...
3. Это может касается не этой темы, интересует создание файла doc, docx, xls, xlsx с содержимым из буфера обмена
вот одна из ссылок:где эти скрипты приведены
создание файла из буфера обмена
а вот другой скрипт, его я тоже взял с форума, но ссылку найти не смог:
Код: Выделить всё
' Создаёт в текущем каталоге файл из буфера обмена
' Параметр "%PBuffer.txt"
CreateObject("Scripting.FileSystemObject").OpenTextFile(Wscript.Arguments(0),8,1).Write vbCrLf&CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")&vbCrLf&vbCrLfAndrey_A писал(а):вот одна из ссылок:
создание файла из буфера обмена
Код: Выделить всё
'==========================================================
' Создание текстового файла с содержимым буфера обмена
' по маске: имя_номер.расширение
'
' Параметры:
' {создаваемый файл} [{минимальное количество цифр номера}]
'==========================================================
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Нет, я не сплю. Я просто медленно моргаю.
Это, в принципе, то же самое.Andrey_A писал(а):а вот другой скрипт, его я тоже взял с форума, но ссылку найти не смог:Код:
' Создаёт в текущем каталоге файл из буфера обмена
' Параметр "%PBuffer.txt"
CreateObject("Scripting.FileSystemObject").OpenTextFile(Wscript.Arguments(0),8,1).Write vbCrLf&CreateObject("htmlfile").ParentWindow.ClipboardData.GetData("text")&vbCrLf&vbCrLf
Основная фишка - TCScript.Helper не используется:
Код: Выделить всё
'==========================================================
' Создание текстового файла с содержимым буфера обмена
' по маске: имя_номер.расширение
'
' Параметры:
' {создаваемый файл} [{минимальное количество цифр номера}]
'==========================================================
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Нет, я не сплю. Я просто медленно моргаю.
Периодически приходится в файлах делать несколько замен и причом не одну, я пользуюсь скриптом из темы
http://forum.wincmd.ru/viewtopic.php?t= ... highlight=
, нельзя ли сделать серию замен или поиск и замена будут записаны в файле - пунктуация любая, может так,
"строка поиска1" "замена1"
"строка поиска2" "замена2"
"строка поиска3" "замена3"
...
т.е. поиск и замена в выделенных файлов по строчному списку поиска и замен из файла...
http://forum.wincmd.ru/viewtopic.php?t= ... highlight=
, нельзя ли сделать серию замен или поиск и замена будут записаны в файле - пунктуация любая, может так,
"строка поиска1" "замена1"
"строка поиска2" "замена2"
"строка поиска3" "замена3"
...
т.е. поиск и замена в выделенных файлов по строчному списку поиска и замен из файла...
Это делается изменением строки Const IsQuestion = False 'Запрос на созданиеAlexTex писал(а):А можно сделать так, чтобы не выскакивало окошко "Буфер обмена содержит текст...", а сразу создавался файл?
Настройка –> Автообновление. Проверь галки.AlexTex писал(а):файл создается, но появляется только после принудительного перечитывания панели
Tol!k, уточни, плиз, где прописать False, поскольку строки Const IsQuestion нет, а "метод тыка" не срабатывает - выдает ошибку "Имя было переопределено".
Код: Выделить всё
If IsQuestion Then
Mess = "Буфер обмена содержит текст. Создать файл" & vbNewLine &_
"""" & NewPath & """" & vbNewLine &_
"с содержимым буфера обмена?" & vbNewLine
Title = "Создание текстового файла"
If MsgBox(Mess, vbYesNo + vbQuestion, Title) = 7 Then Quit
End If В шапке скрипта:AlexTex писал(а):Tol!k, уточни, плиз, где прописать False, поскольку строки Const IsQuestion нет
'====== Изменяемые параметры ==============================
Const IsQuestion = False 'Запрос на создание
'==========================================================
Нет, я не сплю. Я просто медленно моргаю.