'======================== VBS ========================
' Переименовать выбранные объекты в активном каталоге
' по списку имён из буфера обмена или текстового файла
' Условия: путь запуска — пустой;
' кодировка списка для ключа /list: UTF-16 LE
' Параметры: %WF "%P"
' Ключи: /base — переименовывать только базовые имена
' /list:"<Путь к списку>" — файл вместо буфера обмена
'=====================================================
Option Explicit
Dim A, List, REx, FSO, Base, Ext, Clip, Max, i, N, nN
Set A = WSH.Arguments
List = A.Named("list")
If A.Count = 0 Then WSH.Quit
Base = A.Named.Exists("base")
Set REx = New RegExp : REx.Global = True
REx.Pattern = "^[\r\n]+|[\\\s]+(?=\r?\n|$)"
Set FSO = CreateObject("Scripting.FileSystemObject")
If Len(List) Then
Clip = Split(REx.Replace(FSO.OpenTextFile(CreateObject(_
"WScript.Shell").ExpandEnvironmentStrings(List),,,-1).ReadAll, ""), vbLf)
Else
With GetObject("New:1C3B4210-F441-11CE-B9EA-00AA006B1A69)")
.GetFromClipboard : Clip = Split(REx.Replace(.GetText,""), vbLf)
End With
End If : Max = UBound(Clip) : i = 0 : If Max = -1 Then WSH.Quit
With FSO
If Not .FolderExists(A(1)) Then WSH.Quit
Set List = .OpenTextFile(A(0),,,-1)
Do : N = List.ReadLine
If Base Then
Ext = .GetExtensionName(N)
If Len(Ext) Then Ext = "." & Ext
nN = .GetBaseName(Clip(i)) & Ext
Else nN = Clip(i) End If
If Not (.FileExists(nN) Or .FolderExists(nN)) Then _
If .FileExists(N) Then .GetFile(N).Name = nN Else .GetFolder(N).Name = nN
If Max <> i Then i = i + 1 Else Exit Do
Loop Until List.AtEndOfStream
List.Close : Set List = Nothing
End With |