View previous topic :: View next topic |
Author |
Message |
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Wed Jul 27, 2011 09:25 Post subject: |
|
|
shveicar wrote: | Здравствуйте. Сегодня опять пришлось обратиться к этому скрипту Quote: | Для каждой из папок из файла-списка очищаются вложенные папки |
|
shveicar wrote: | Странно, не получается (вот пример из файла списка)
Code: | H:\1\CLARA-HU1-B-004\Video\CLARA-HU1-B-004-1280x720
H:\1\CLARA-HU1-B-004\Video\CLARA-HU1-B-004_video_640x368 |
Соответственно должны удалиться папки
Code: | CLARA-HU1-B-004-1280x720 и CLARA-HU1-B-004_video_640x368 |
|
Если использовался приведённый выше скрипт, то он не будет удалять папки из файла-списка. И слэши здесь не при чём. Ещё раз - удаляются вложенные папки для каждой папки из файла-списка. Т.е., если в файле списке содержится "H:\1\CLARA-HU1-B-004\Video\", то тогда будут удалены все папки, вложенные в папку "H:\1\CLARA-HU1-B-004\Video\", а сама папка останется. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jul 27, 2011 09:40 Post subject: |
|
|
А ведь действительно. Удалять-то эти папки не имеет никакого смысла, в них же, исходя из ТЗ, перемещённые файлы останутся. |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Wed Jul 27, 2011 09:51 Post subject: |
|
|
Если нужно перемещать на уровень вверх содержимое именно выделенных папок, то используем следующий скрипт:
Code: | '======================================================================
' Очищается каждая папка из файла-списка:
' файлы перемещаются в папку выше уровнем.
' При совпадении имён файлов выполняется автоматическое переименование.
' После выполнения переноса очищенные папки удаляются.
'
' Параметры:
' {файл-список}
'
' Пример параметров при вызове из TC:
' %L
'======================================================================
Option Explicit
Dim FSO, FF, F, oF
With WScript
If .Arguments.Count = 0 Then
MsgBox "Не заданы параметры!", vbOKOnly + vbCritical, "Очистка папок"
.Quit
End If
FF = .Arguments(0)
End With
Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO.OpenTextFile(FF, 1)
Do While Not .AtEndOfStream
F = Trim(.ReadLine)
If F <> "" Then
If FSO.FolderExists(F) Then
Set oF = FSO.GetFolder(F)
On Error Resume Next
MoveFromFolder oF, oF.ParentFolder
If Err.Number = 0 Then FSO.DeleteFolder oF.Path
Err.Clear
On Error GoTo 0
End If
End If
Loop
.Close
End With
Set FSO = Nothing
WScript.Quit
Sub MoveFromFolder(pSubFolder, pFolder)
Dim lF
For Each lF In pSubFolder.Files
MoveFile lF, pFolder
Next
For Each lF In pSubFolder.SubFolders
MoveFromFolder lF, pFolder
FSO.DeleteFolder lF.Path
Next
End Sub
Sub MoveFile(pFile, pFolder)
Dim lF
lF = pFolder
If Right(lF, 1) <> "\" Then lF = lF & "\"
lF = NextName(lF & pFile.Name)
FSO.MoveFile pFile.Path, lF
End Sub
Function NextName(pFilePath)
Dim lPath, lName, lExt, li, lAdd
Const lQ = 1 'Минимальное количество цифр в номере
With CreateObject("Scripting.FileSystemObject")
lPath = .GetParentFolderName(pFilePath)
If lPath <> "" Then lPath = lPath & "\"
lName = .GetBaseName(pFilePath)
lExt = .GetExtensionName(pFilePath)
NextName = pFilePath
Do While .FileExists(NextName)
li = li + 1
If li < 10^lQ Then
lAdd = Right(String(lQ, "0") & li, lQ)
Else
lAdd = li
End If
NextName = lPath & lName & "(" & lAdd & ")." & lExt
Loop
End With
End Function
|
_________________ Нет, я не сплю. Я просто медленно моргаю.
Last edited by Batya on Wed Jul 27, 2011 10:19; edited 1 time in total |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jul 27, 2011 09:55 Post subject: |
|
|
Batya wrote: | перемещать на уровень вверх именно выделенные папки | Может, всё-таки содержимое выделенных папок, а не сами папки? |
|
Back to top |
|
|
Batya
Joined: 15 Dec 2004 Posts: 2218 Location: Москва, Россия
|
(Separately) Posted: Wed Jul 27, 2011 10:19 Post subject: |
|
|
Flasher
ОК. Поправил. _________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Wed Jul 27, 2011 13:10 Post subject: |
|
|
Спасибо Огромное Batya - отличный скрипт! (а то вручную удалять вложенные каталоги -с ума можно сойти особенно если их больше 500). И Спасибо Flasher - за помощь. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jul 27, 2011 13:32 Post subject: |
|
|
shveicar wrote: | а то вручную удалять вложенные каталоги -с ума можно сойти | Зачем вручную? Был же уже вариант. |
|
Back to top |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Wed Jul 27, 2011 15:47 Post subject: |
|
|
Теперь при имеющимся скрипте, этот вариант не удобен Поскольку речь идет о большом количестве многоуровневых вложенных каталогов, приходится каждый раз заходить в выбранный каталог и уже после этого удалять выделенные папки. До скрпта от Batya- приходилось так и делать. Жаль, что помочь с этим вопросом у него видимо времени нет. Но все равно, Большое Спасибо. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jul 27, 2011 16:07 Post subject: |
|
|
shveicar wrote: | Поскольку речь идет о большом количестве многоуровневых вложенных каталогов, приходится каждый раз заходить в выбранный каталог и уже после этого удалять выделенные папки. | Ничего не путаем? Мой скрипт сам удаляет очистившиеся папки. Никаких лишних телодвижений выполнять не требуется. Разница скриптов состоит только в том, что последний скрипт переименовывает файлы по глубине по счётчику, не затрагивая папки, а мой дублирует папки с совпавшими именами, которые находятся в активной панели. Кстати, в некоторых случаях удобней синхронизировать содержимое папок с одинаковыми названиями, чем бродить по всей глубине и производить пофайловое сравнение. |
|
Back to top |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Wed Jul 27, 2011 17:00 Post subject: |
|
|
Ну не знаю, если говорить именно об этом скрипте то в моем случае он выдает Code: |
Сценарий: F:\total\Utils\test\3.vbs
Строка: 24
Символ: 10
Ошибка: Файл уже существует
Код: 800A003A
| хотя файла дубликата в верхней папке нет. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jul 27, 2011 17:06 Post subject: |
|
|
shveicar wrote: | хотя файла дубликата в верхней папке нет. | По логике в таком случае должен быть и одноимённый и переименованный файл. WScript из воздуха сообщение не покажет. |
|
Back to top |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Wed Jul 27, 2011 17:23 Post subject: |
|
|
Ну да, все правильно, ему(скрипту) в данном случае не нравятся имена -
некоторых папок, впрочем главное задача выполнена, а каждому инструменту, свое применение.Спасибо. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jul 27, 2011 17:26 Post subject: |
|
|
shveicar wrote: | в данном случае не нравятся имена - некоторых папок | Например, каких? |
|
Back to top |
|
|
shveicar
Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Wed Jul 27, 2011 17:52 Post subject: |
|
|
Хорошо- приведу кратко пример Code: | H:\Cache\cdn.clara-g.com\CLARA-CZ1-A-003\SplittedVideos\5CLARA-CZ1-A-003-part5\
H:\Cache\cdn.clara-g.com\CLARA-CZ1-A-003\SplittedVideos\6CLARA-CZ1-A-003-part6\ | список полных путей, при выделении одной папки например 5CLARA-CZ1-A-003-part5\ скрипт срабатывает и файл(с таким же именем что и папка) перемещается, но если выделить несколько папок Code: | 5CLARA-CZ1-A-003-part5\ и 6CLARA-CZ1-A-003-part6\ | то он выдает ошибку, Понятно что ему не нравятся одинаковые имена папок и файлов(имена файлов вложенных в папки совпадают), а поскольку переименования по счетчику у него нет, вот он и капризничает. А теперь представте, В моей ситуации - лезть в каждую папку, и пытаться применить этот скрипт и проверять почему он срабатывает или нет, - сколько на это уйдет времени? Проще, конечно воспользоваться скриптом от Batya он сделает все что надо, останется только переименовать имена (если было совпадение) и отфильтровать дубликаты, -что также не сложно.[/code] |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jul 27, 2011 17:59 Post subject: |
|
|
Что-то мне подсказывает, что использовался первый вариант скрипта, а не последний. Так? |
|
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
|