Страница 2 из 2

Добавлено: Ср апр 27, 2011 23:52
Avada
Вахмурка
Я это тоже сначала хотел предложить. но теперь всё упирается в этот грандиозный файл-список из 9 тысяч (?) папок верхнего уровня.

Добавлено: Ср апр 27, 2011 23:57
den114
Именно в этом вся и проблема, если б их было неско десятков, я б и тему поднимать не стал, быстрее было бы вручную.

Добавлено: Чт апр 28, 2011 00:08
Flasher
Тут я бы назвал тему: Перемещение всех файлов в каталоги верхнего уровня
И критерий будет соответствующим.
В общем-то, сделать можно.
sa писал(а):F5 опечатка?
Исправил.

Добавлено: Чт апр 28, 2011 02:16
sa
Вахмурка писал(а):2den114
Потренируйся на кошках.
Ещё один вариант для тренировки на кошках.
Выделить нужные каталоги и упаковать их по Alt+F5 в какой-нибудь временный каталог с опциями “Отдельные архивы для каждого выбранного файла/каталога” и “Учитывать подкаталоги”, но без того чтобы “Сохранять пути”. Опцию “Удалять исходные файлы после упаковки” добавлять по вкусу или по свободному месту на диске. Самым сложным будет выбрать опцию замены существующих файлов. Возможно, подойдёт “Пропустить все”.
Затем выделить все архивы и по Alt+F9 “Распаковать каждый архив в отдельный каталог (с именем архива)”.

Добавлено: Чт апр 28, 2011 10:31
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

Добавлено: Чт апр 28, 2011 10:52
sa
den114 писал(а):В случае если перемещаемый файл уже присутствует он должен заменятся.
Какой алгоритм замены? Например, оставлять более свежие файлы...

Добавлено: Чт апр 28, 2011 11:23
Batya
sa писал(а):Какой алгоритм замены?
Никакой. Просто замена. В задании ничего подобного не требовалось.

Добавлено: Чт апр 28, 2011 11:38
sa
Batya писал(а):Никакой.
То есть получается, что задача одна, а ответов у неё великое множество, если конечно в дереве не дубли одних и тех же файлов.

Добавлено: Чт апр 28, 2011 11:57
Batya
sa
У автора темы условия могут быть любые.
Например, в корневой папке должны лежать актуальные версии файлов, а появляются такие файлы где-то в дебрях вложенной структуры. При этом имена пересекаются только с именами файлов, уже лежащих в корневой папке.
Вообщем, ты для себя спрашиваешь или чисто академический интерес? Если для себя, то опиши, что тебе надо. В ином случае, лучше дождаться ответа автора темы.

Добавлено: Чт апр 28, 2011 12:42
sa
Batya писал(а):В ином случае, лучше дождаться ответа автора темы.
Именно так.

Добавлено: Чт апр 28, 2011 16:47
den114
Никаких условий замены нет, просто если при перемещении оказывается что такой файл уже есть он заменяется вновь пришедшим. Вне зависимости от даты их создания размера и т.д.

Добавлено: Чт апр 28, 2011 16:54
Flasher
den114
Вообще-то в таких случаях спасибо (как минимум) говорят. :wink:

Добавлено: Чт апр 28, 2011 17:14
sa
Действительно
Batya писал(а):У автора темы условия могут быть любые.
в том числе и
den114 писал(а):Никаких условий замены нет<>Вне зависимости от даты их создания размера и т.д
Не ожидал…Тогда, наверное и на кошках тренироваться не надо.:)

Добавлено: Чт апр 28, 2011 17:31
den114
Flasher писал(а):
Вообще-то в таких случаях спасибо (как минимум) говорят. :wink:

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

Batya

ОГРОМНОЕ СПАСИБО !!! Буду должен.

Добавлено: Чт апр 28, 2011 17:33
Flasher
den114
А я уже по коду вижу, что там всё правильно. Сам вчера начал что-то аналогичное делать, потом дела другие появились. :wink: