Перемещение всех файлов в корневую папку

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Вахмурка
Я это тоже сначала хотел предложить. но теперь всё упирается в этот грандиозный файл-список из 9 тысяч (?) папок верхнего уровня.
Даже самая богатая фантазия
Не представит себе наши безобразия.
den114
Сообщения: 25
Зарегистрирован: Сб ноя 03, 2007 15:39

Сообщение den114 »

Именно в этом вся и проблема, если б их было неско десятков, я б и тему поднимать не стал, быстрее было бы вручную.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Тут я бы назвал тему: Перемещение всех файлов в каталоги верхнего уровня
И критерий будет соответствующим.
В общем-то, сделать можно.
sa писал(а):F5 опечатка?
Исправил.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Вахмурка писал(а):2den114
Потренируйся на кошках.
Ещё один вариант для тренировки на кошках.
Выделить нужные каталоги и упаковать их по Alt+F5 в какой-нибудь временный каталог с опциями “Отдельные архивы для каждого выбранного файла/каталога” и “Учитывать подкаталоги”, но без того чтобы “Сохранять пути”. Опцию “Удалять исходные файлы после упаковки” добавлять по вкусу или по свободному месту на диске. Самым сложным будет выбрать опцию замены существующих файлов. Возможно, подойдёт “Пропустить все”.
Затем выделить все архивы и по Alt+F9 “Распаковать каждый архив в отдельный каталог (с именем архива)”.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

den114
vbs-скрипт:

Код: Выделить всё

'=====================================================================
' Перемещение файлов в корневую папку (верхнюю)

' Параметры:
' {файл-список корневых папок}

' Пример параметров при вызове из TC:
' %L
'=====================================================================

Dim FSO, F
Set FSO = CreateObject("Scripting.FileSystemObject")

With FSO.OpenTextFile(WScript.Arguments(0), 1)
  Do While Not .AtEndOfStream
    F = Trim(.ReadLine)
    If F <> "" Then
      If FSO.FolderExists(F) Then
        If Right(F, 1) <> "\" Then F = F & "\"
        Process F, F
      End If
    End If
  Loop
End With

Set FSO = Nothing
Wscript.Quit()

Sub Process(pPath, pTarget)
  Dim lF
  For Each lF in FSO.GetFolder(pPath).SubFolders
    Process lF.Path & "\", pTarget
  Next
  If LCase(pPath) <> LCase(pTarget) Then
    For Each lF in FSO.GetFolder(pPath).Files
      'Если файл с целевым именем существует, предварительно удаляем его
      If FSO.FileExists(pTarget & lF.Name) Then FSO.DeleteFile pTarget & lF.Name, True
      lF.Move pTarget
    Next
  End If
End Sub
Нет, я не сплю. Я просто медленно моргаю.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

den114 писал(а):В случае если перемещаемый файл уже присутствует он должен заменятся.
Какой алгоритм замены? Например, оставлять более свежие файлы...
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

sa писал(а):Какой алгоритм замены?
Никакой. Просто замена. В задании ничего подобного не требовалось.
Нет, я не сплю. Я просто медленно моргаю.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Batya писал(а):Никакой.
То есть получается, что задача одна, а ответов у неё великое множество, если конечно в дереве не дубли одних и тех же файлов.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

sa
У автора темы условия могут быть любые.
Например, в корневой папке должны лежать актуальные версии файлов, а появляются такие файлы где-то в дебрях вложенной структуры. При этом имена пересекаются только с именами файлов, уже лежащих в корневой папке.
Вообщем, ты для себя спрашиваешь или чисто академический интерес? Если для себя, то опиши, что тебе надо. В ином случае, лучше дождаться ответа автора темы.
Нет, я не сплю. Я просто медленно моргаю.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Batya писал(а):В ином случае, лучше дождаться ответа автора темы.
Именно так.
den114
Сообщения: 25
Зарегистрирован: Сб ноя 03, 2007 15:39

Сообщение den114 »

Никаких условий замены нет, просто если при перемещении оказывается что такой файл уже есть он заменяется вновь пришедшим. Вне зависимости от даты их создания размера и т.д.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

den114
Вообще-то в таких случаях спасибо (как минимум) говорят. :wink:
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Действительно
Batya писал(а):У автора темы условия могут быть любые.
в том числе и
den114 писал(а):Никаких условий замены нет<>Вне зависимости от даты их создания размера и т.д
Не ожидал…Тогда, наверное и на кошках тренироваться не надо.:)
den114
Сообщения: 25
Зарегистрирован: Сб ноя 03, 2007 15:39

Сообщение den114 »

Flasher писал(а):
Вообще-то в таких случаях спасибо (как минимум) говорят. :wink:

Спасибо это слабо сказано :)
Просто нет привычки заранее (до проверки) как ругать так и благодарить.

Batya

ОГРОМНОЕ СПАСИБО !!! Буду должен.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

den114
А я уже по коду вижу, что там всё правильно. Сам вчера начал что-то аналогичное делать, потом дела другие появились. :wink:
Ответить