Flasher

|
Posted: Mon Feb 09, 2015 23:09 Post subject: |
|
|
Serge Yolkin
Ладно, я чего-то подустал ждать.
Iori
Code: | '============================== VBS =============================
' Переименовать выбранные элементы с помощью регулярных выражений
' Параметры: %WL <строка поиска> <строка замены>
' /i — ключ отключения зависимости от регистра
'================================================================
Option Explicit
Dim C, List, S, R, REx, F, N, IsFold, Ln, BN, Ext, Path, FN, i
With WSH.Arguments
C = .UnNamed.Count : If C = 0 Then WSH.Quit
If C <> 3 Then MsgBox "Следует указать 3 параметра!",_
4144, Space(12) & "Ошибка вводных данных" : WSH.Quit
List = .Item(0) : S = .Item(1) : R = .Item(2)
C = .Named.Exists("i")
End With: Set REx = New RegExp: REx.Global = 1
REx.Pattern = S : If C Then REx.IgnoreCase = 1
With CreateObject("Scripting.FileSystemObject")
Set List = .OpenTextFile(List,,,-1)
Do : F = List.ReadLine : N = .GetFileName(F) : IsFold = Right(F, 1) = "\"
If IsFold Then Ln = Len(F) - 1 : BN = N Else Ln = Len(F) :_
BN = .GetBaseName(F) : Ext = .GetExtensionName(F) :_
If Len(Ext) Then Ext = "." & Ext
Path = "\\?\" & .GetParentFolderName(F) & "\"
If Ln > 259 Then F = "\\?\" & F
BN = REx.Replace(BN, R) : FN = BN & Ext : i = 0
While (.FileExists(Path & FN) OR .FolderExists(Path & FN)) And FN <> N
i = i + 1 : FN = BN & " (" & i & ")" & Ext : Wend : If FN <> N Then _
If IsFold Then .GetFolder(F).Name = FN Else .GetFile(F).Name = FN
Loop Until List.AtEndOfStream
End With : CreateObject("WScript.Shell").SendKeys "^r" | Параметры для запрошенного случая: %WL ([^\(|^\[])(\s+)((?!\)|\])) $1.$3
Строка поиска ещё может быть такой: ([^\(|^\[])(\s+)([^\)|^\]])
По числу символов одинаково, так что - без разницы. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Last edited by Flasher on Tue Feb 17, 2015 19:43; edited 2 times in total |
|