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 

Удаление в 50 каталогах лишних папок, с сохранением файлов
Goto page Previous  1, 2, 3, 4, 5, 6, 7, 8  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Batya



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

Post (Separately) Posted: Wed Jul 27, 2011 09:25    Post subject: Reply with quote

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
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jul 27, 2011 09:40    Post subject: Reply with quote

А ведь действительно. Удалять-то эти папки не имеет никакого смысла, в них же, исходя из ТЗ, перемещённые файлы останутся.
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Wed Jul 27, 2011 09:51    Post subject: Reply with quote

Если нужно перемещать на уровень вверх содержимое именно выделенных папок, то используем следующий скрипт:
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
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jul 27, 2011 09:55    Post subject: Reply with quote

Batya wrote:
перемещать на уровень вверх именно выделенные папки
Может, всё-таки содержимое выделенных папок, а не сами папки?
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Wed Jul 27, 2011 10:19    Post subject: Reply with quote

Flasher
ОК. Поправил.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Wed Jul 27, 2011 13:10    Post subject: Reply with quote

Спасибо Огромное Batya - отличный скрипт! (а то вручную удалять вложенные каталоги -с ума можно сойти особенно если их больше 500). И Спасибо Flasher - за помощь.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jul 27, 2011 13:32    Post subject: Reply with quote

shveicar wrote:
а то вручную удалять вложенные каталоги -с ума можно сойти
Зачем вручную? Был же уже вариант.
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Wed Jul 27, 2011 15:47    Post subject: Reply with quote

Quote:
Зачем вручную?
Теперь при имеющимся скрипте, этот вариант не удобен Поскольку речь идет о большом количестве многоуровневых вложенных каталогов, приходится каждый раз заходить в выбранный каталог и уже после этого удалять выделенные папки. До скрпта от Batya- приходилось так и делать. Жаль, что помочь с этим вопросом у него видимо времени нет. Но все равно, Большое Спасибо.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jul 27, 2011 16:07    Post subject: Reply with quote

shveicar wrote:
Поскольку речь идет о большом количестве многоуровневых вложенных каталогов, приходится каждый раз заходить в выбранный каталог и уже после этого удалять выделенные папки.
Ничего не путаем? Мой скрипт сам удаляет очистившиеся папки. Никаких лишних телодвижений выполнять не требуется. Разница скриптов состоит только в том, что последний скрипт переименовывает файлы по глубине по счётчику, не затрагивая папки, а мой дублирует папки с совпавшими именами, которые находятся в активной панели. Кстати, в некоторых случаях удобней синхронизировать содержимое папок с одинаковыми названиями, чем бродить по всей глубине и производить пофайловое сравнение.
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Wed Jul 27, 2011 17:00    Post subject: Reply with quote

Ну не знаю, если говорить именно об этом скрипте то в моем случае он выдает
Code:

Сценарий:   F:\total\Utils\test\3.vbs
Строка:   24
Символ:   10
Ошибка:   Файл уже существует
Код:   800A003A
хотя файла дубликата в верхней папке нет.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jul 27, 2011 17:06    Post subject: Reply with quote

shveicar wrote:
хотя файла дубликата в верхней папке нет.
По логике в таком случае должен быть и одноимённый и переименованный файл. WScript из воздуха сообщение не покажет.
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Wed Jul 27, 2011 17:23    Post subject: Reply with quote

Ну да, все правильно, ему(скрипту) в данном случае не нравятся имена -
некоторых папок, впрочем главное задача выполнена, а каждому инструменту, свое применение.Спасибо.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jul 27, 2011 17:26    Post subject: Reply with quote

shveicar wrote:
в данном случае не нравятся имена - некоторых папок
Например, каких?
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Wed Jul 27, 2011 17:52    Post subject: Reply with quote

Хорошо- приведу кратко пример
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
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jul 27, 2011 17:59    Post subject: Reply with quote

Что-то мне подсказывает, что использовался первый вариант скрипта, а не последний. Так?
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, 5, 6, 7, 8  Next
Page 3 of 8

 
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