Страница 1 из 2
Переименование файлов и папок по списку из буфера обмена
Добавлено: Ср апр 25, 2018 00:22
Dimsok
Имеется скрипт (и самостоятельная кнопка) для переименования выделенного файла из буфера. Хотелось бы иметь средство, позволяющее переименовывать все выделенные файлы из буфера вида, в который они заносятся туда по команде "выделение/копировать имена файлов в буфер".
Добавлено: Ср апр 25, 2018 01:31
Flasher
Избыточное описание.
Напрашиваются 2 проблемы:
1. Выделенных файлов 50, а в буфере список из 20. Или наоборот. Что тогда?
2. Имена из буфера полностью или частично уже есть в получателе (в т.ч. среди выделенных). И?
Сделал пока так:
1. Обработка меньшего из чисел в буфере/получателе.
2. Пропускать переименование файла, попавшего под совпадение.
Код: Выделить всё
'=================================== VBS ===================================
' Переименовать выбранные в активной панели файлы по списку из буфера обмена
' Условие: путь запуска — пустой
' Параметр: %WF
'===========================================================================
Option Explicit : Dim REx, Clip, Max, i, List, N, nN
If WSH.Arguments.Count = 0 Then WSH.Quit
Set REx = New RegExp : REx.Global = True
REx.Pattern = "^[\r\n]+|[\r\n]+(?=\r?\n)|[\r\n]+$"
With GetObject("New:1C3B4210-F441-11CE-B9EA-00AA006B1A69)")
.GetFromClipboard : Clip = Split(REx.Replace(.GetText,""),vbLf)
End With : Max = UBound(Clip) : i = 0 : If Max = -1 Then WSH.Quit
With CreateObject("Scripting.FileSystemObject")
Set List = .OpenTextFile(WSH.Arguments(0),,,-1)
Do : N = List.ReadLine : nN = Clip(i)
If .FileExists(N) And Not .FileExists(nN) Then .GetFile(N).Name = nN
If Max <> i Then i = i + 1 Else Exit Do
Loop Until List.AtEndOfStream
List.Close : Set List = Nothing
End With
Добавлено: Ср апр 25, 2018 03:58
Dimsok
Спасибо, так годится. Что исправить для варианта, чтобы не менять расширение?
И ещё бы добавить возможность переименовывания папок.
Добавлено: Ср апр 25, 2018 04:49
Flasher
Для папок заголовок топика надо править.
С добавками:
Код: Выделить всё
'======================== 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
Добавлено: Ср апр 25, 2018 07:36
Avada
Заголовок темы приведён в более адекватный содержанию вид.
Добавлено: Пт апр 27, 2018 16:49
ZZZAlexZZZ
Flasher
Для данного
скрипта вылезает ошибка:
Код: Выделить всё
Сценарий: D:\Cl.vbs
Строка: 11
Символ: 1
Ошибка: Невозможно создание объекта контейнером ActiveX: 'GetObject'
Код: 800A01AD
Источник: Ошибка выполнения Microsoft VBScript
В чем может проблема, куда копать(путь запуска пустой)?
Добавлено: Пт апр 27, 2018 20:45
Flasher
ZZZAlexZZZ
Не думал, что кто-то сюда ещё нагрянет (запрос специфический).

TCx64? У
Dimsok XPx32. Переноска wscript.exe для TCHelper найдётся в наличии? Если да, то случай подходящий. Если нет, то путь спереди можно брать такой: %SystemRoot%\SysWOW64\wscript.exe. Также для обоюдного случая можно запилить переменную в Autorun.
Добавлено: Сб апр 28, 2018 08:50
ZZZAlexZZZ
Flasher
Спасибо, периодически приходится делать нечто подобное, поэтому работа с буфером в vbs без утилит очень интересует.
Что касается битности - верно, TC64, система тоже.
Вариант с %SystemRoot%\SysWOW64\wscript.exe подходит больше, т.к. если до конца описывать, то работа через терминалку на сервере, куда ничего и не поставить и не скопировать.
Добавлено: Сб апр 28, 2018 10:00
Flasher
ZZZAlexZZZ писал(а):поэтому работа с буфером в vbs без утилит очень интересует.
Да тут, в общем-то, большинство примеров и так без утилит.
ZZZAlexZZZ писал(а):система тоже.
Система вторична. Значение имеет битность родительского процесса.
ZZZAlexZZZ писал(а):работа через терминалку на сервере, куда ничего и не поставить и не скопировать.
Т.е. "не скопировать"? В подпапку ТС нельзя скопировать wscript.exe?

И как уже намекнул, с переменной %wscript% было бы универсальней:
autorun.cfg писал(а):If %SYSINFO_OSARCH% = 32 Then
SetEnv wscript %SystemRoot%\System32\wscript.exe
Else
SetEnv wscript %SystemRoot%\SysWOW64\wscript.exe
Добавлено: Сб апр 28, 2018 10:38
ZZZAlexZZZ
Flasher
Т.е. "не скопировать"? В подпапку ТС нельзя скопировать wscript.exe?
TCHelper нельзя на терминальную машину скопировать, неоткуда взять.
Добавлено: Сб апр 28, 2018 10:42
Flasher
ZZZAlexZZZ
А где в цитате TCHelper?

TC находится на терминальной машине? Т.е. не переноска?
Добавлено: Сб апр 28, 2018 10:55
ZZZAlexZZZ
Flasher
А где в цитате TCHelper?
Сюда смотрел, на это ориентировался как на вариант решения.
У Dimsok XPx32. Переноска wscript.exe для TCHelper найдётся в наличии?
Да и не в нем конкретно дело, никиких утилит не добавить, "голая" винда
TC находится на терминальной машине? Т.е. не переноска?
Да, админ как поставил. Могу только скрипты набивать)
Добавлено: Сб апр 28, 2018 11:03
Flasher
ZZZAlexZZZ
Какая-то странная история. Скрипты плодить можно, а утилиты нет. Запрет на запись .exe или что? А библиотеки с плагинами?
Добавлено: Сб апр 28, 2018 11:23
ZZZAlexZZZ
Flasher
Нас за оффтоп не расстреляют)?
Показать
Работаю с сервером через терминал, через который файлы не передашь никак. Total на сервере установлен админом, могу в его папке создавать текстовые документы. Плагинов нет и не будет.
Есть возможность просматривать pdf, exl, doc ну и т.п офисные, почты нет. Так понятно?
Добавлено: Сб апр 28, 2018 11:59
Flasher
ZZZAlexZZZ
Ответ на косвенный вопрос может иначе разрешить проблему. В его папке физический (не условный) запрет на создание файлов с определёнными расширениями? Так?