Добавлено: Ср янв 27, 2010 12:24
Batya
Спасибо, всё работает!
Спасибо, всё работает!
Форум поддержки пользователей Total Commander
https://forum.wincmd.ru/
Код: Выделить всё
<code>1100</code>, <code>900</code>, <code>1800</code> ==> <code>220</code>Код: Выделить всё
Set myRegExp = CreateObject("VBScript.RegExp")
myRegExp.Pattern = "<code (.*)</code>"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
Нужно править каждый скрипт, поэтому подними темы, где эти скрипты приведены.Andrey_A писал(а):В нескольких темах форума встречается скрипты
вот одна из ссылок:где эти скрипты приведены
Код: Выделить всё
' Создаёт в текущем каталоге файл из буфера обмена
' Параметр "%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
Код: Выделить всё
'==========================================================
' Создание текстового файла с содержимым буфера обмена
' по маске: имя_номер.расширение
'
' Параметры:
' {создаваемый файл} [{минимальное количество цифр номера}]
'==========================================================
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Это делается изменением строки Const IsQuestion = False 'Запрос на созданиеAlexTex писал(а):А можно сделать так, чтобы не выскакивало окошко "Буфер обмена содержит текст...", а сразу создавался файл?
Настройка –> Автообновление. Проверь галки.AlexTex писал(а):файл создается, но появляется только после принудительного перечитывания панели
Код: Выделить всё
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 'Запрос на создание
'==========================================================