Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Автоматическое создание папок
Goto page Previous  1, 2, 3, 4 ... 13, 14, 15  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
SergM/S



Joined: 08 Apr 2009
Posts: 11

Post (Separately) Posted: Wed Apr 08, 2009 08:36    Post subject: более сложный случай Reply with quote

Batya wrote:
Нечто подобное я уже делал. Теперь немного проще:
Code:
'=====================================================================
' Создание папки по имени файла и перемещение в нее файла
' Может быть выделено несколько файлов

' Для создания папок в текущей панели
'   в параметрах вызова из TC должно быть прописано:
' %L

' Для создания папок в противоположной панели
'   в параметрах вызова из TC должно быть прописано:
' %L "%T"
'=====================================================================

If WScript.Arguments.Count = 0 Then
  MsgBox "Не указаны параметры!", vbOKOnly + vbError, "Внимание!"
  Wscript.Quit
End If

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

Dim FileName, FilePath, DashInName, NewFilePath
Do While Not TempFile.AtEndOfStream
  Set SelFile = FSO.GetFile(TempFile.ReadLine)
  FileName    = FSO.GetBaseName(SelFile)
  FilePath    = SelFile.ParentFolder
  If WScript.Arguments.Count > 1 Then
    NewFilePath = WScript.Arguments(1) & FileName
  Else
    NewFilePath = FilePath & "\" & FileName
  End If
  If Not FSO.FolderExists(NewFilePath) Then
    FSO.CreateFolder(NewFilePath)
  End If
  If Not FSO.FileExists(NewFilePath & "\" & FileName) Then
    FSO.MoveFile SelFile, NewFilePath & "\"
  Else
    MsgBox "Уже существует файл " & FileName & " в папке " & NewFilePath, vbOKOnly + vbExclamation, "Внимание!"
  End If
Loop
Set TempFile = Nothing
Set FSO      = Nothing
Set SelFile  = Nothing
Wscript.Quit


а вот у меня наоборот более сложный случай, помогите, плз, если возможно. Как должен выглядеть код, если:
нужно автоматизировать создание папок (и последующее перемещение в них файлов) проименовав их по первой части имени файлов, которая представляет из себя название песни, вторая часть это один из нескольких вариантов и начинается либо с _MIDI либо _AUDIO либо _MPEG. Вот как эту проблему с именами решить?
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Wed Apr 08, 2009 15:09    Post subject: Reply with quote

Скрипт, вариациями которого я пользуюсь, судя по когда-то вписанному году, уже лет пять. Не совсем то, что Вам надо, т.к. создает только одну папку, но для старта, надеюсь, подойдёт.
Code:
'  File:         namedir.vbs
'  Version:      1.0 beta
'  Description:  Все файлы выделенные в одном окне передвигаются в новую папку во втором окне с именем
'             общей части первых двух файлов выделения начиная с начала, если совпадение не находится,
'             то с именем первого файла в выделении
'  (c) 2004, Lev F

Dim TCS, f, ff, NewDir, FSO, nn, n, counter, fcount, tf
Set TCS = CreateObject("TCScript.Helper")

Set FSO = CreateObject("Scripting.FileSystemObject")

ff = TCS.GetSrcSelectedFiles(-1)
if UBound(ff)=0 Then
   f0=fso.GetBaseName(ff(0))
Else
   f0=FSO.GetFile(ff(0)).Name
   f1=FSO.GetFile(ff(1)).Name
   ln=1
   While Mid(f0,1,ln)=Mid(f1,1,ln)
     ln=ln+1
   wend
   If ln<>1 Then f0=Mid(f0,1,ln)
   lastlet=Mid(f0,ln,1)
   while lastlet="0" Or lastlet="-" Or lastlet="_" Or lastlet="(" Or lastlet="[" Or lastlet=" " Or lastlet="."
      ln=ln-1
      lastlet=mid(f0, ln,1)
      ch=true
   wend
   If ch Then f0=Mid(f0,1,ln)
End If
inp=InputBox ("Enter DirName",,f0)
If inp<>"" then

   NewDir = TCS.GetTrgPath & "\" & inp & "\"
   MsgBox NewDir
   If Not FSO.FolderExists(NewDir) Then FSO.CreateFolder(NewDir)
   For i = 0 to ubound(ff)
      fcount = 1
      Set tf = FSO.GetFile(ff(i))
      Do While FSO.FileExists(NewDir + tf.Name)
         nn = tf.Name
         n = InStrRev(nn, ".")
         If n <> 0 Then
            nn = Left(nn, n - 1)
         End If

         tf.Name = nn & "_" & fcount & "." & FSO.GetExtensionName(tf)
         fcount = fcount + 1
      Loop
      If FSO.fileexists(tf) Then tf.Move NewDir
   Next
   TCS.SendCommand "cm_ClearAll"
End If
Set FSO = Nothing
Set TCS = Nothing
Back to top
View user's profile Send private message
SergM/S



Joined: 08 Apr 2009
Posts: 11

Post (Separately) Posted: Wed Apr 08, 2009 16:47    Post subject: Reply with quote

[quote="Lev"]Скрипт, вариациями которого я пользуюсь, судя по когда-то вписанному году, уже лет пять. Не совсем то, что Вам надо, т.к. создает только одну папку, но для старта, надеюсь, подойдёт.
quote]

Спасибо, Lev, за этот вариант. Но вышепроцитированный мной код мне во всём подходит, кроме одного - он дает имя папке по имени файла отсекая всё от знака "-", а в моём случае надо чтоб отсекалось всё что находится в правой части имени, начиная от слов
"_MIDI" либо "_AUDIO" либо "_MPEG". Подозреваю, что вопрос жутко дилетанский, но я совершенно не в теме. Как это прописать? Через ";" или как ещё?
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Wed Apr 08, 2009 21:02    Post subject: Reply with quote

Никак не могу понять какие названия файлов и куда их надо пихнуть.
читаю-читаю, а понять не удаётся.
То ли файлы называются
pupkin_midi.aaa
pupkin_audio.bbb
antipupkin_midi.ccc

и надо их распихать по папкам pupkin, antipupkin
То ли по папкам midi, audio
То ли у них названия ещё как-то составлены.
Back to top
View user's profile Send private message
SergM/S



Joined: 08 Apr 2009
Posts: 11

Post (Separately) Posted: Wed Apr 08, 2009 21:28    Post subject: Reply with quote

Lev wrote:
Никак не могу понять какие названия файлов и куда их надо пихнуть.
читаю-читаю, а понять не удаётся.
То ли файлы называются
pupkin_midi.aaa
pupkin_audio.bbb
antipupkin_midi.ccc

и надо их распихать по папкам pupkin, antipupkin
То ли по папкам midi, audio
То ли у них названия ещё как-то составлены.


первый вариант - понято правильно!
надо их распихать по папкам pupkin, antipupkin
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Wed Apr 08, 2009 21:38    Post subject: Reply with quote

Lev wrote:
Никак не могу понять какие названия файлов и куда их надо пихнуть.

Как я понял, это:
pupkin1_midi vasya.aaa
pupkin2_audio petya.bbb
pupkin3_mpeg borya.ccc

А переместить надо:
pupkin1\vasya.aaa
pupkin2\petya.bbb
pupkin3\borya.ccc


SergM/S, так?
Если так, то сначала переименуй такие файлы, используя "Групповое переименование" - укажи в поле "Найти:" - "_audio |_mpeg |_midi ", а в поле "Заменить на:" - "-|-|-".
После этого используй скрипт по ранее приведенной ссылке.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
SergM/S



Joined: 08 Apr 2009
Posts: 11

Post (Separately) Posted: Wed Apr 08, 2009 21:52    Post subject: Reply with quote

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

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

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


в строке

DashInName = InstrRev(FileName, "-")

вместо дефиса пытаюсь подставить "midi" "audio" через разные & ; и тд Smile кроме выскакивающей ошибки ничего не добился Sad
Как правильно написать?
Back to top
View user's profile Send private message
SergM/S



Joined: 08 Apr 2009
Posts: 11

Post (Separately) Posted: Wed Apr 08, 2009 22:06    Post subject: Reply with quote

[quote="BatyaSergM/S, так?
[/quote]

Не совсем.. проще немного.
Файлы вида
vasya_pupkin_-_nazvanie_pesni_AUDIO.wav
vasya_pupkin_-_nazvanie_pesni_MIDI.mid
petya_pupkin_-_drugaya_pesnya_AUDIO.wav
petya_pupkin_-_drugaya_pesnya_MIDI.mid

распихать по папкам вида

vasya_pupkin_-_nazvanie_pesni
petya_pupkin_-_drugaya_pesnya
Back to top
View user's profile Send private message
SergM/S



Joined: 08 Apr 2009
Posts: 11

Post (Separately) Posted: Wed Apr 08, 2009 22:16    Post subject: Reply with quote

Т.е. в имени папки должен остаться только исполнитель и название (всё остальное надо отсечь). И по этому признаку рассортировать.

Это ведь не должно быть сложным, надо только как-то вписать в код чтоб отсекались слова MIDI и AUDIO
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Thu Apr 09, 2009 15:02    Post subject: Reply with quote

А чем не подходит мой скрипт?
Back to top
View user's profile Send private message
SergM/S



Joined: 08 Apr 2009
Posts: 11

Post (Separately) Posted: Thu Apr 09, 2009 16:58    Post subject: Reply with quote

Lev wrote:
А чем не подходит мой скрипт?


сорри, я упростил имя, там несколько вариантов аудио, как и миди
AUDIO_1 AUDIO_2 AUDIO_3

т.е. к названию подмешается лишнее.

Так а то о чём я спрашиваю - оно невозможно?
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Thu Apr 09, 2009 17:28    Post subject: Reply with quote

SergM/S wrote:
Так а то о чём я спрашиваю - оно невозможно?
Подобное, но в более общем виде я уже просил у Batya.
В твоём конкретном случае, я так понимаю, нужно будет в параметрах передать 0001:
Code:
vasya_pupkin_-_nazvanie_pesni_AUDIO.wav
petya_pupkin_-_drugaya_pesnya_MIDI.mid
kolya_pupkin_-_lu4saya_pesnya_blah_blah_blah.blah
     0      0         0      1
vasya_pupkin_-_nazvanie_pesni\vasya_pupkin_-_nazvanie_pesni_AUDIO.wav
petya_pupkin_-_drugaya_pesnya\petya_pupkin_-_drugaya_pesnya_MIDI.mid
kolya_pupkin_-_lu4saya_pesnya\kolya_pupkin_-_lu4saya_pesnya_blah_blah_blah.blah
Back to top
View user's profile Send private message
SergM/S



Joined: 08 Apr 2009
Posts: 11

Post (Separately) Posted: Thu Apr 09, 2009 21:01    Post subject: Reply with quote

Tol!k wrote:
В твоём конкретном случае, я так понимаю, нужно будет в параметрах передать 0001:


Да!!!!!!!!!

этот вариант подходит!
Жаль, но уровень моей подготовки не позволяет ничего с этим сделать. Я попросту не знаю куда этот кусок кода вписать
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Fri Apr 10, 2009 00:43    Post subject: Reply with quote

SergM/S wrote:
вместо дефиса пытаюсь подставить "midi" "audio" через разные & ; и тд Smile кроме выскакивающей ошибки ничего не добился Sad
Как правильно написать?
Так просто не получится. Такой вариант скрипта предполагает разделитель длиной 1 символ.
SergM/S wrote:
Так а то о чём я спрашиваю - оно невозможно?
Вполне выполнимо. Надо только, как всегда, немного подождать Wink
Tol!k wrote:
Подобное, но в более общем виде я уже просил у Batya.
Всё-таки здесь не совсем тот вариант. Как я понимаю, в началах имен файлов может быть неопределенное (и не совпадающее для разных файлов) число разделителей.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
SergM/S



Joined: 08 Apr 2009
Posts: 11

Post (Separately) Posted: Fri Apr 10, 2009 05:10    Post subject: Reply with quote

Batya wrote:
Вполне выполнимо. Надо только, как всегда, немного подождать Wink


спасибо, это обнадёживает Smile
с последним скриптом я действит. поторопился, да, кол-во разделителей может быть разным, не подходит он..
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, 4 ... 13, 14, 15  Next
Page 3 of 15

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group