Создание папок с именем файлов
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Автоматизация Total Commander

#1: Создание папок с именем файлов Author: den114 PostPosted: Sat Nov 03, 2007 16:44
    —
Небходим плагин для создания папок с тем же именем что и у выделенных файлов и перемещения этих файлов в соответствующие папки.

Перенесено из Плагинов.
Моторокер.

#2:  Author: DrSharkLocation: Kyiv, Ukraine PostPosted: Sat Nov 03, 2007 17:29
    —
Из RU.TCKB
TCKB wrote:
Создание папки с частью имени выделенного файла с последующим перемещением


Q: Требуется создать папку с тем же именем, что имя у выделенного файла, а потом переместить этот файл в эту папку.

A:


'=====================================================================
' Создание папки с частью имени файла, перемещение в нее файла
' Может быть выделено несколько файлов

' В параметрах вызова из TC должно быть прописано:
' %L
'=====================================================================

Code:
Dim TempFile, FSO, SelFile
Set TempFile =
CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0), 1)
Set FSO = CreateObject("Scripting.FileSystemObject")

Dim MoveFiles, FileName, FilePath, DashInName, NewFilePath, M1, M2, M3, M4
MoveFiles = ""
Do While Not TempFile.AtEndOfStream
Set SelFile = FSO.GetFile(TempFile.ReadLine)
FileName = SelFile.Name
FilePath = SelFile.ParentFolder
DashInName = InstrRev(FileName, "-")
If DashInName <> 0 Then
NewFilePath = FilePath & "\" & Trim(Left(FileName, DashInName - 1))
If Not FSO.FolderExists(NewFilePath) Then
FSO.CreateFolder(NewFilePath)
End If
If Not FSO.FileExists(NewFilePath & "\" & FileName) Then
FSO.MoveFile SelFile, NewFilePath & "\"
MoveFiles = MoveFiles + FileName & chr(13)
Else
M1 = MsgBox("Уже существует файл " & FileName & " в папке " & NewFilePath, vbOKOnly + vbExclamation, "Внимание!")
End If
Else
M2 = MsgBox("Имя исполнителя не выявлено", vbOKOnly + vbExclamation, "Внимание!")
End If
Loop
If MoveFiles <> "" Then
MoveFiles = Left(MoveFiles, Len(MoveFiles) - 1)
M3 = MsgBox("Перемещены файлы:" & chr(13) & MoveFiles, vbOKOnly + vbInformation, "Результат")
Else
M4 = MsgBox("Ни одного файла не перемещено" & chr(13) & MoveFiles, vbOKOnly + vbExclamation, "Внимание!")
End If
Set TempFile = Nothing
Set FSO = Nothing
Set SelFile = Nothing
Wscript.Quit

И ещё в разделе форума Автоматизация наверняка что-то есть, поищи.

#3: Создание папок с именем файла Author: den114 PostPosted: Sun Jun 01, 2008 14:42
    —
Здравствуйте !
Подскажите как сделать следующее: имеется множество файлов, необходимо создать папку для каждого файла (с таким же именем как у файла) и переместить файл в созданную папку.

 !  CaptainFlint:
Тема-дубликат объединена с предшественником.

#4:  Author: D1PLocation: Тбилиси PostPosted: Sun Jun 01, 2008 22:47
    —
Создание папки с частью имени выделенного файла с последующим перемещением

#5:  Author: CaptainFlintLocation: Москва PostPosted: Sun Jun 01, 2008 23:15
    —
den114
Какой смысл задавать вопросы, если не читать ответов?
http://forum.wincmd.ru/viewtopic.php?t=11199

Объединяю обе темы в одну и делаю предупреждение.

#6:  Author: swr PostPosted: Mon Jul 07, 2008 16:33
    —
Вот мне интерестно, а почему в строке

DashInName = InstrRev(FileName, "-")

FileName, "-", наверное писавший этот скрипт, делал это для какой то конкретной задачи, более универсальным ведь было бы не дефиз поставить а точку.

DashInName = InstrRev(FileName, ".")

#7:  Author: BatyaLocation: Москва, Россия PostPosted: Mon Jul 07, 2008 17:38
    —
swr
Это мой скрипт.
Только в данном счлучае ответ не соответствует вопросу.
Если помотреть заголовок скрипта, там написано:
Quote:
Создание папки с частью имени файла, перемещение в нее файла

Эта "часть имени" по тех. заданию запросившего скрипт пользователя - начало имени файла до символа "-" (см. самое начало темы Script Request). Смысловая же нагрузка наименования переменной не соответствует функционалу. Просто я переделывал другой свой скрипт без изменения наименований переменных.

#8:  Author: se7en PostPosted: Sat Dec 12, 2009 17:26
    —
Добрый день,

задам глупый вопрос - каким образом воспользоваться этим скриптом? FAQ не нашёл.

#9:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Dec 12, 2009 19:31
    —
se7en
Читаем здесь.

#10:  Author: se7en PostPosted: Sat Dec 12, 2009 20:33
    —
Спасибо, всё сделал. Перетащил кнопку, но возникает ошибка в 10 строке, 16 символ Sad

#11:  Author: AvadaLocation: Россия, Саратов PostPosted: Sat Dec 12, 2009 21:42
    —
se7en
Скрипт, ссылка на который приведена в посте D1P (в TCKB), работает безукоризненно. При условии, что для кнопки указано не только имя файла скрипта в поле "Команда", но — в нижележащем поле — ещё и параметры, приведённые в шапке скрипта. Проверял оба варианта (создание папки в той же или в другой панели).

#12:  Author: Itar-Tass PostPosted: Wed Dec 16, 2009 16:52
    —
Тоже не работает на 3 разных компьютерах.
Картинка

Вот такая ошибка.Microsoft Visual C++
переустанавливал-не помогло.

Тестовый скрипт из папки scripthelper
RestartTotal.vbs работает.

 !  Avada:
Картинку заменил ссылкой.

#13:  Author: BatyaLocation: Москва, Россия PostPosted: Wed Dec 16, 2009 17:23
    —
se7en, Itar-Tass
Скрипты мои.
В каком именно возникает ошибка?
Приведите здесь не картинку ошибки (у меня она недоступна), а текст.
Чтобы получить текст ошибки, нужно нажать Ctrl+C при появлении диалогового окна - в буфере обмена окажется нужный текст.

#14:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Dec 16, 2009 17:38
    —
Itar-Tass
Во-первых, скрин активного окна без постороннего мусора снимается клавишами Alt+PrintScreen.
Во-вторых, пункт 15 правил форума о допустимом размере картинок для кого писан? Замечание за нарушение правил.
В-третьих, от этой картинки вообще мало толку. Гораздо интереснее, как скрипт запускался? Кнопкой? Код в студию.
У меня при запуске кнопкой на основе скрипта с TCKB с правильно указанными параметрами — повторяю ещё раз — всё работает прекрасно.

#15:  Author: Itar-Tass PostPosted: Wed Dec 16, 2009 18:45
    —
Quote:
Script: C:\Program Files (x86)\Total Commander\PLUGINS\Tools\tcwshelp_b10\Scripts\papki.vbs
Line: 2
Char: 16
Error: Синтаксическая ошибка
Code: 800A03EA
Source: Ошибка компиляции Microsoft VBScript

---------------------------
ОК



Команда "C:\Program Files (x86)\Total Commander\PLUGINS\Tools\tcwshelp_b10\Scripts\papki.vbs"

Параметры %L

C:\Program Files (x86)\Total Commander\PLUGINS\Tools\tcwshelp_b10\Scripts\

Файл знака C:\WINDOWS\System32\WScript.exe

#16:  Author: Itar-Tass PostPosted: Wed Dec 16, 2009 18:54
    —
Вот этот скрипт работает
http://www.tckb.ru/wiki/Поиск_пустых_каталогов.

Так что вряд ли дело в моем(моих) компьютерах.

#17:  Author: Itar-Tass PostPosted: Wed Dec 16, 2009 19:18
    —
Нашел в чем причина.

Текст для скрипта нужно сохранять AkelPad(ну или просто блокнотом)

только в кодировке 866(Oem-русская).

В любой другой кодировке,включая юникоде-ошибки.

#18:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Dec 16, 2009 19:23
    —
Itar-Tass wrote:
Вот этот скрипт работает
http://www.tckb.ru/wiki/Поиск_пустых_каталогов.

Я про это уже дважды говорил.
Кстати, код кнопки обычно представляется более цивилизованным путём: в контекстном меню кнопки выполняется "Копировать", далее в пост вставляется из буфера скопированый текст (пример использования тегов отображается при наведении мышки на кнопку "Code").
А насчёт кодировки — у меня этот скрипт (как и другие) сохранён в Windows-1251. При чём тут DOS-кодировка?

P.S. Кстати, это не единственный косяк с кодировками. Ссылочки на Wiki с кириллицей надо оформлять правильно. Советую в посте D1P вызвать в контекстном меню ссылки Свойства и посмотреть, как это должно выглядеть. Разумеется, крокозябры лучше скрыть, заменив в посте ссылку её описанием.

#19:  Author: Itar-Tass PostPosted: Wed Dec 16, 2009 19:47
    —
Не знаю причем кодировка, но в 1251 работать не хотела.
Текст с одного и того же браузера и с одной той же кодировки сохранял.

#20:  Author: BatyaLocation: Москва, Россия PostPosted: Thu Dec 17, 2009 02:01
    —
Itar-Tass wrote:
Script: C:\Program Files (x86)\Total Commander\PLUGINS\Tools\tcwshelp_b10\Scripts\papki.vbs
Line: 2
Char: 16
Error: Синтаксическая ошибка

Если это скрипт, приведенный здесь во втором посте, то глазами я вижу лишний перевод строки (не знаю, это как движок форума так показывает, или кто-то нажал лишний раз Enter после символа "=". Лучше взять исходный скрипт отсюда.

#21:  Author: Dimsok PostPosted: Mon Oct 16, 2017 00:47
    —
Частенько пользуюсь скриптом, который в противной панели создаёт папку с именем выделенного файла и перемещает его в неё. Иногда возникает нужда переместить в неё не один файл, а неск. а папка называлась бы по имени первого файла из списка выделенных. Пригодился бы такой скрипт.

#22:  Author: FlasherLocation: Москва PostPosted: Mon Oct 16, 2017 01:33
    —
Сам же ссылку приводил. Второй параметр: %T%S1

P.S.: Чтобы панель не была противной, монитор стоит как следует протереть и при желании украсить стразиками. Wink
Слово "противный" в значении "противоположный" давно устарело.

#23:  Author: angry_dogLocation: Питер PostPosted: Fri Jul 12, 2019 20:04
    —
С помощью батиного скрипта замечательно создаются группы каталогов по имени файлов, но каталог создается с расширением файла в имени. Есть файл с именем file.jpg, с помощью скрипта создается каталог file.jpg и туда перемещается исходный файл.
Можно ли подредактировать скрипт, чтобы расширение в имени файла закрывалось в скобки с добавлением произвольных (которые можно менять в тексте скрипта) символов, вида: file [jpg.любые_символы]?
Или упрощая задачу, вместо любых символов жестко забить "wv", чтобы получилось file [jpg.wv]

#24:  Author: FlasherLocation: Москва PostPosted: Sat Jul 13, 2019 04:37
    —
angry_dog
Есть вещи посовременней: кнопки, скрипт.
К получателю (в т. ч. %T/%P) можно элементарно добавить %O.[%E.блабла] .

#25:  Author: angry_dogLocation: Питер PostPosted: Sat Jul 13, 2019 12:44
    —
Flasher
я извиняюсь, неправильно сформулировал проблему - заметил только сейчас. Батин скрипт все делает правильно и расширение файла он не использует в названии файла. Это у меня точка в имени файла: computer_643.iso.wv. Соответственно он и создает каталог с именем computer_643.iso, а мне нужно чтобы у каталога было имя computer_643 [iso.wv]
Попробовал вашу кнопку, она работает но делает немного не то - переносит группу файлов под курсором в каталог с именем первого файла, а мне нужно, чтобы каждый файл в отдельный каталог с [iso.wv] на конце.
Скрипт у меня отказался работать - просто ничего не происходит. Может параметры запуска нужны?
И да, "К получателю (в т. ч. %T/%P) можно элементарно добавить %O.[%E.блабла]" не понял куда это.

#26:  Author: FlasherLocation: Москва PostPosted: Sat Jul 13, 2019 13:50
    —
angry_dog
В этом скрипте в 18 строке = 3 заменить на > 2 , в 23-й — Bas на Fil , а в 25-й — Execute(BN)(0).Submatches(0) на Replace(BN, A(3)) .
Параметры: %WL "" ^([^.]+)\.(.+) "$1 [$2]"

#27:  Author: angry_dogLocation: Питер PostPosted: Sat Jul 13, 2019 16:43
    —
Flasher
Спасибо! Все получилось. Полученный (правленный) скрипт:

Code:
Set A = WSH.Arguments : C = A.Count : If C = 0 Then WSH.Quit
Set FSO  = CreateObject("Scripting.FileSystemObject")
Set ShAp = CreateObject("Shell.Application")
Set List = FSO.OpenTextFile(A(0),,,-1)
If C > 2 Then _
Set Reg  = New RegExp : Reg.Global = True:_
Reg.IgnoreCase = True : Reg.Pattern = A(2)
Do : F = Trim(List.ReadLine)
  If FSO.FileExists(F) Then
    BN = FSO.GetFileName(F)
    If IsObject(Reg) Then If Reg.Test(BN) Then _
    BN = Reg.Replace(BN, A(3)) Else BN = ""
    If Len(BN) Then
      NF = "" : If C > 1 Then If A(1) <> "" Then NF = FSO.BuildPath(A(1),BN)
      If NF = "" Then NF = FSO.BuildPath(FSO.GetParentFolderName(F), BN)
      If Not FSO.FolderExists(NF) Then FSO.CreateFolder(NF)
      ShAp.NameSpace(NF).MoveHere F
    End If
  End If
Loop Until List.AtEndOfStream : List.Close

#28:  Author: FlasherLocation: Москва PostPosted: Sat Jul 13, 2019 21:30
    —
angry_dog
Пожалуйста. Но со старой шапкой публиковать не имело смысла...

#29:  Author: AvadaLocation: Россия, Саратов PostPosted: Mon Jul 29, 2019 12:11
    —
angry_dog
Старая шапка из кода удалена.

#30: Создание папок с именем файлов Author: Kostrula PostPosted: Sat Jan 18, 2020 15:53
    —
Добрый день!

Подскажите пожалуйста, что нужно изменить в коде скрипта по созданию папки с частью имени файла и перемещении в нее файла.
Сейчас, как написали выше "часть имени" - начало имени файла до символа "-" (DashInName = InstrRev(FileName, "-"))
А как сделать, чтобы "часть имени" была концом имени файла от определенного символа? Например:

file_photo1_TST_02_477_0.jpg переместить в папку TST_02_477_0
file_photo22_TST_03_4767_5.tif переместить в папку TST_03_4767_5
file_photo34_TST_05_9827_078.png переместить в папку TST_05_9827_078

#31:  Author: FlasherLocation: Москва PostPosted: Sun Jan 19, 2020 01:39
    —
Kostrula
%WL "" (TS.+) — параметры моего скрипта без изменений.

#32:  Author: Kostrula PostPosted: Sun Jan 19, 2020 11:43
    —
Flasher
Спасибо вам огромное, все получилось.



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group