View previous topic :: View next topic |
Author |
Message |
Dimsok
Joined: 17 Aug 2014 Posts: 663
|
(Separately) Posted: Wed Apr 25, 2018 01:22 Post subject: Переименование файлов и папок по списку из буфера обмена |
|
|
Имеется скрипт (и самостоятельная кнопка) для переименования выделенного файла из буфера. Хотелось бы иметь средство, позволяющее переименовывать все выделенные файлы из буфера вида, в который они заносятся туда по команде "выделение/копировать имена файлов в буфер".
Last edited by Dimsok on Wed Apr 25, 2018 06:02; edited 1 time in total |
|
Back to top |
|
![](templates/subSilver/images/spacer.gif) |
Flasher
![](images/avatars/11897631144e285f14b2775.jpg)
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Apr 25, 2018 02:31 Post subject: |
|
|
Избыточное описание.
Напрашиваются 2 проблемы:
1. Выделенных файлов 50, а в буфере список из 20. Или наоборот. Что тогда?
2. Имена из буфера полностью или частично уже есть в получателе (в т.ч. среди выделенных). И?
Сделал пока так:
1. Обработка меньшего из чисел в буфере/получателе.
2. Пропускать переименование файла, попавшего под совпадение.
Code: | '=================================== 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 |
_________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
![](templates/subSilver/images/spacer.gif) |
Dimsok
Joined: 17 Aug 2014 Posts: 663
|
(Separately) Posted: Wed Apr 25, 2018 04:58 Post subject: |
|
|
Спасибо, так годится. Что исправить для варианта, чтобы не менять расширение?
И ещё бы добавить возможность переименовывания папок. |
|
Back to top |
|
![](templates/subSilver/images/spacer.gif) |
Flasher
![](images/avatars/11897631144e285f14b2775.jpg)
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Apr 25, 2018 05:49 Post subject: |
|
|
Для папок заголовок топика надо править.
![](templates/subSilver/images/spoiler_show.png) С добавками: Code: | '======================== 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 |
_________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Last edited by Flasher on Wed May 02, 2018 03:46; edited 1 time in total |
|
Back to top |
|
![](templates/subSilver/images/spacer.gif) |
Avada
![](images/avatars/765200809489b35982c966.jpg)
Joined: 01 Aug 2008 Posts: 10236 Location: Россия, Саратов
|
(Separately) Posted: Wed Apr 25, 2018 08:36 Post subject: |
|
|
Заголовок темы приведён в более адекватный содержанию вид. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
![](templates/subSilver/images/spacer.gif) |
ZZZAlexZZZ
![](images/avatars/5109156265ae32e8a34b53.jpg)
Joined: 08 Mar 2014 Posts: 68
|
(Separately) Posted: Fri Apr 27, 2018 17:49 Post subject: |
|
|
Flasher
Для данного скрипта вылезает ошибка:
Code: |
Сценарий: D:\Cl.vbs
Строка: 11
Символ: 1
Ошибка: Невозможно создание объекта контейнером ActiveX: 'GetObject'
Код: 800A01AD
Источник: Ошибка выполнения Microsoft VBScript
|
В чем может проблема, куда копать(путь запуска пустой)? |
|
Back to top |
|
![](templates/subSilver/images/spacer.gif) |
Flasher
![](images/avatars/11897631144e285f14b2775.jpg)
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Apr 27, 2018 21:45 Post subject: |
|
|
ZZZAlexZZZ
Не думал, что кто-то сюда ещё нагрянет (запрос специфический). TCx64? У Dimsok XPx32. Переноска wscript.exe для TCHelper найдётся в наличии? Если да, то случай подходящий. Если нет, то путь спереди можно брать такой: %SystemRoot%\SysWOW64\wscript.exe. Также для обоюдного случая можно запилить переменную в Autorun. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
![](templates/subSilver/images/spacer.gif) |
ZZZAlexZZZ
![](images/avatars/5109156265ae32e8a34b53.jpg)
Joined: 08 Mar 2014 Posts: 68
|
(Separately) Posted: Sat Apr 28, 2018 09:50 Post subject: |
|
|
Flasher
Спасибо, периодически приходится делать нечто подобное, поэтому работа с буфером в vbs без утилит очень интересует.
Что касается битности - верно, TC64, система тоже.
Вариант с %SystemRoot%\SysWOW64\wscript.exe подходит больше, т.к. если до конца описывать, то работа через терминалку на сервере, куда ничего и не поставить и не скопировать. |
|
Back to top |
|
![](templates/subSilver/images/spacer.gif) |
Flasher
![](images/avatars/11897631144e285f14b2775.jpg)
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Apr 28, 2018 11:00 Post subject: |
|
|
ZZZAlexZZZ wrote: | поэтому работа с буфером в vbs без утилит очень интересует. | Да тут, в общем-то, большинство примеров и так без утилит.
ZZZAlexZZZ wrote: | система тоже. | Система вторична. Значение имеет битность родительского процесса.
ZZZAlexZZZ wrote: | работа через терминалку на сервере, куда ничего и не поставить и не скопировать. | Т.е. "не скопировать"? В подпапку ТС нельзя скопировать wscript.exe?
И как уже намекнул, с переменной %wscript% было бы универсальней:
autorun.cfg wrote: | If %SYSINFO_OSARCH% = 32 Then
SetEnv wscript %SystemRoot%\System32\wscript.exe
Else
SetEnv wscript %SystemRoot%\SysWOW64\wscript.exe |
_________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
![](templates/subSilver/images/spacer.gif) |
ZZZAlexZZZ
![](images/avatars/5109156265ae32e8a34b53.jpg)
Joined: 08 Mar 2014 Posts: 68
|
(Separately) Posted: Sat Apr 28, 2018 11:38 Post subject: |
|
|
Flasher
Quote: | Т.е. "не скопировать"? В подпапку ТС нельзя скопировать wscript.exe? |
TCHelper нельзя на терминальную машину скопировать, неоткуда взять. |
|
Back to top |
|
![](templates/subSilver/images/spacer.gif) |
Flasher
![](images/avatars/11897631144e285f14b2775.jpg)
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Apr 28, 2018 11:42 Post subject: |
|
|
ZZZAlexZZZ
А где в цитате TCHelper?
TC находится на терминальной машине? Т.е. не переноска? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
![](templates/subSilver/images/spacer.gif) |
ZZZAlexZZZ
![](images/avatars/5109156265ae32e8a34b53.jpg)
Joined: 08 Mar 2014 Posts: 68
|
(Separately) Posted: Sat Apr 28, 2018 11:55 Post subject: |
|
|
Flasher
Quote: | А где в цитате TCHelper? |
Сюда смотрел, на это ориентировался как на вариант решения.
Quote: | У Dimsok XPx32. Переноска wscript.exe для TCHelper найдётся в наличии? |
Да и не в нем конкретно дело, никиких утилит не добавить, "голая" винда
Quote: | TC находится на терминальной машине? Т.е. не переноска? |
Да, админ как поставил. Могу только скрипты набивать) |
|
Back to top |
|
![](templates/subSilver/images/spacer.gif) |
Flasher
![](images/avatars/11897631144e285f14b2775.jpg)
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Apr 28, 2018 12:03 Post subject: |
|
|
ZZZAlexZZZ
Какая-то странная история. Скрипты плодить можно, а утилиты нет. Запрет на запись .exe или что? А библиотеки с плагинами? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
![](templates/subSilver/images/spacer.gif) |
ZZZAlexZZZ
![](images/avatars/5109156265ae32e8a34b53.jpg)
Joined: 08 Mar 2014 Posts: 68
|
(Separately) Posted: Sat Apr 28, 2018 12:23 Post subject: |
|
|
Flasher
Нас за оффтоп не расстреляют)?
![](templates/subSilver/images/spoiler_show.png) Hidden text
Работаю с сервером через терминал, через который файлы не передашь никак. Total на сервере установлен админом, могу в его папке создавать текстовые документы. Плагинов нет и не будет.
Есть возможность просматривать pdf, exl, doc ну и т.п офисные, почты нет. Так понятно?
|
|
Back to top |
|
![](templates/subSilver/images/spacer.gif) |
Flasher
![](images/avatars/11897631144e285f14b2775.jpg)
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Apr 28, 2018 12:59 Post subject: |
|
|
ZZZAlexZZZ
Ответ на косвенный вопрос может иначе разрешить проблему. В его папке физический (не условный) запрет на создание файлов с определёнными расширениями? Так? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
![](templates/subSilver/images/spacer.gif) |
|