Страница 13 из 42

Добавлено: Ср янв 27, 2010 12:24
SVM
Batya
Спасибо, всё работает!

Добавлено: Ср мар 31, 2010 03:19
taravasya
Здравствуйте. Есть пара вопросов. Я новичок, и слабовато разбираюсь. Но пытаюсь...
Вот тут
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: Он же собственно второй вопрос. Мне было бы очень удобно, если-бы я мог выделить папку(в каждой папке содержится один такой файл который надо править), и после этого запустить скрипт. Таким образом изменив файл находящийся внутри папки. Правка по-одному файлу меня устроит.
Прошу прощения за сумбурность. Пробился почти сутки с этими скриптами, и сейчас уже по сути засыпая пишу запрос. Если чего не понятно объяснил скажите я постараюсь разложить по-полочкам завтра утром....

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

Код: Выделить всё

'===============================================
' Замена текста в файле с помощью рег. выражений
'
' Параметры:
' {файл} {текст для поиска} {текст для замены}
'===============================================
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
Синий, зелёный, красный - подставляй собственные значения. Работает для текущей папки (под курсором).

Добавлено: Чт апр 01, 2010 11:07
taravasya
Спасибо огромное! Это то что нужно. :D
Вообще молодец Вы, Batya.....

Добавлено: Пн май 03, 2010 13:43
Andrey_A
В нескольких темах форума встречается скрипты создающие файл из буфера обмена, я постоянно одним из них пользуюсь, но появились предложения по улучшению
1. В параметрах скрипта три параметра {путь} {имя файла} {расширение}
2. Скрипт бы проверял, если есть подобный файл в папке, то добавлял к файлу 01,02,03...
3. Это может касается не этой темы, интересует создание файла doc, docx, xls, xlsx с содержимым из буфера обмена

Добавлено: Вт май 04, 2010 16:47
Batya
Andrey_A писал(а):В нескольких темах форума встречается скрипты
Нужно править каждый скрипт, поэтому подними темы, где эти скрипты приведены.

Добавлено: Ср май 05, 2010 01:18
Andrey_A
где эти скрипты приведены
вот одна из ссылок:
создание файла из буфера обмена
а вот другой скрипт, его я тоже взял с форума, но ссылку найти не смог:

Код: Выделить всё

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

Добавлено: Ср май 05, 2010 10:21
Batya
Andrey_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

Добавлено: Ср май 05, 2010 11:15
Batya
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

Добавлено: Ср май 05, 2010 15:43
Andrey_A
Спасибо Batya! Всё очень шикарно - быстро и функционально!

Добавлено: Пт май 07, 2010 01:13
Andrey_A
Периодически приходится в файлах делать несколько замен и причом не одну, я пользуюсь скриптом из темы
http://forum.wincmd.ru/viewtopic.php?t= ... highlight=

, нельзя ли сделать серию замен или поиск и замена будут записаны в файле - пунктуация любая, может так,
"строка поиска1" "замена1"
"строка поиска2" "замена2"
"строка поиска3" "замена3"
...
т.е. поиск и замена в выделенных файлов по строчному списку поиска и замен из файла...

Добавлено: Пн май 10, 2010 03:40
AlexTex
Batya
Скрипт - супер! Огромное спасибо! :D
P.S. А можно сделать так, чтобы не выскакивало окошко "Буфер обмена содержит текст...", а сразу создавался файл?
Пробовал убрать блок "If IsQuestion Then", файл создается, но появляется только после принудительного перечитывания панели :(

Добавлено: Пн май 10, 2010 06:49
Tol!k
AlexTex писал(а):А можно сделать так, чтобы не выскакивало окошко "Буфер обмена содержит текст...", а сразу создавался файл?
Это делается изменением строки Const IsQuestion = False 'Запрос на создание
AlexTex писал(а):файл создается, но появляется только после принудительного перечитывания панели
Настройка –> Автообновление. Проверь галки.

Добавлено: Вт май 11, 2010 12:26
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 

Добавлено: Вт май 11, 2010 13:22
Batya
AlexTex писал(а):Tol!k, уточни, плиз, где прописать False, поскольку строки Const IsQuestion нет
В шапке скрипта:
'====== Изменяемые параметры ==============================
Const IsQuestion = False 'Запрос на создание
'==========================================================