View previous topic :: View next topic |
Author |
Message |
SergM/S
Joined: 08 Apr 2009 Posts: 11
|
(Separately) Posted: Wed Apr 08, 2009 08:36 Post subject: более сложный случай |
|
|
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 |
|
|
Lev
Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Wed Apr 08, 2009 15:09 Post subject: |
|
|
Скрипт, вариациями которого я пользуюсь, судя по когда-то вписанному году, уже лет пять. Не совсем то, что Вам надо, т.к. создает только одну папку, но для старта, надеюсь, подойдёт.
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 |
|
|
SergM/S
Joined: 08 Apr 2009 Posts: 11
|
(Separately) Posted: Wed Apr 08, 2009 16:47 Post subject: |
|
|
[quote="Lev"]Скрипт, вариациями которого я пользуюсь, судя по когда-то вписанному году, уже лет пять. Не совсем то, что Вам надо, т.к. создает только одну папку, но для старта, надеюсь, подойдёт.
quote]
Спасибо, Lev, за этот вариант. Но вышепроцитированный мной код мне во всём подходит, кроме одного - он дает имя папке по имени файла отсекая всё от знака "-", а в моём случае надо чтоб отсекалось всё что находится в правой части имени, начиная от слов
"_MIDI" либо "_AUDIO" либо "_MPEG". Подозреваю, что вопрос жутко дилетанский, но я совершенно не в теме. Как это прописать? Через ";" или как ещё? |
|
Back to top |
|
|
Lev
Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Wed Apr 08, 2009 21:02 Post subject: |
|
|
Никак не могу понять какие названия файлов и куда их надо пихнуть.
читаю-читаю, а понять не удаётся.
То ли файлы называются
pupkin_midi.aaa
pupkin_audio.bbb
antipupkin_midi.ccc
и надо их распихать по папкам pupkin, antipupkin
То ли по папкам midi, audio
То ли у них названия ещё как-то составлены. |
|
Back to top |
|
|
SergM/S
Joined: 08 Apr 2009 Posts: 11
|
(Separately) Posted: Wed Apr 08, 2009 21:28 Post subject: |
|
|
Lev wrote: | Никак не могу понять какие названия файлов и куда их надо пихнуть.
читаю-читаю, а понять не удаётся.
То ли файлы называются
pupkin_midi.aaa
pupkin_audio.bbb
antipupkin_midi.ccc
и надо их распихать по папкам pupkin, antipupkin
То ли по папкам midi, audio
То ли у них названия ещё как-то составлены. |
первый вариант - понято правильно!
надо их распихать по папкам pupkin, antipupkin |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Wed Apr 08, 2009 21:38 Post subject: |
|
|
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 |
|
|
SergM/S
Joined: 08 Apr 2009 Posts: 11
|
(Separately) Posted: Wed Apr 08, 2009 21:52 Post subject: |
|
|
Пытаюсь заниматься самодеятельностью.. получается плохо.
взял за основу код:
'=====================================================================
' Создание папки с частью имени файла, перемещение в нее файла
' Может быть выделено несколько файлов
' В параметрах вызова из 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" через разные & ; и тд кроме выскакивающей ошибки ничего не добился
Как правильно написать? |
|
Back to top |
|
|
SergM/S
Joined: 08 Apr 2009 Posts: 11
|
(Separately) Posted: Wed Apr 08, 2009 22:06 Post subject: |
|
|
[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 |
|
|
SergM/S
Joined: 08 Apr 2009 Posts: 11
|
(Separately) Posted: Wed Apr 08, 2009 22:16 Post subject: |
|
|
Т.е. в имени папки должен остаться только исполнитель и название (всё остальное надо отсечь). И по этому признаку рассортировать.
Это ведь не должно быть сложным, надо только как-то вписать в код чтоб отсекались слова MIDI и AUDIO |
|
Back to top |
|
|
Lev
Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Thu Apr 09, 2009 15:02 Post subject: |
|
|
А чем не подходит мой скрипт? |
|
Back to top |
|
|
SergM/S
Joined: 08 Apr 2009 Posts: 11
|
(Separately) Posted: Thu Apr 09, 2009 16:58 Post subject: |
|
|
Lev wrote: | А чем не подходит мой скрипт? |
сорри, я упростил имя, там несколько вариантов аудио, как и миди
AUDIO_1 AUDIO_2 AUDIO_3
т.е. к названию подмешается лишнее.
Так а то о чём я спрашиваю - оно невозможно? |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Thu Apr 09, 2009 17:28 Post subject: |
|
|
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 |
|
|
SergM/S
Joined: 08 Apr 2009 Posts: 11
|
(Separately) Posted: Thu Apr 09, 2009 21:01 Post subject: |
|
|
Tol!k wrote: | В твоём конкретном случае, я так понимаю, нужно будет в параметрах передать 0001: |
Да!!!!!!!!!
этот вариант подходит!
Жаль, но уровень моей подготовки не позволяет ничего с этим сделать. Я попросту не знаю куда этот кусок кода вписать |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Fri Apr 10, 2009 00:43 Post subject: |
|
|
SergM/S wrote: | вместо дефиса пытаюсь подставить "midi" "audio" через разные & ; и тд Smile кроме выскакивающей ошибки ничего не добился Sad
Как правильно написать? | Так просто не получится. Такой вариант скрипта предполагает разделитель длиной 1 символ.
SergM/S wrote: | Так а то о чём я спрашиваю - оно невозможно? | Вполне выполнимо. Надо только, как всегда, немного подождать
Tol!k wrote: | Подобное, но в более общем виде я уже просил у Batya. | Всё-таки здесь не совсем тот вариант. Как я понимаю, в началах имен файлов может быть неопределенное (и не совпадающее для разных файлов) число разделителей. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
SergM/S
Joined: 08 Apr 2009 Posts: 11
|
(Separately) Posted: Fri Apr 10, 2009 05:10 Post subject: |
|
|
Batya wrote: | Вполне выполнимо. Надо только, как всегда, немного подождать |
спасибо, это обнадёживает
с последним скриптом я действит. поторопился, да, кол-во разделителей может быть разным, не подходит он.. |
|
Back to top |
|
|
|
|
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
|