Перемещение нужного количества файлов по папкам
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2, 3, 4, 5, 6, 7, 8, 9  Next  :| |:
Total Commander -> Автоматизация Total Commander

#1: Перемещение нужного количества файлов по папкам Author: Andrey_ALocation: Сочи PostPosted: Tue Sep 07, 2010 01:51
    —
Всем форумчанам привет!
Задача такая: в папке есть кучу файлов. Необходимо переместить их в папки по 50 штук в каждую. Панель создания папок не важна - можно в эту же. Имена папок - тоже (001, 002....). Я пытался сам сделать батник или скрипт, но не получается. Желательно, чтобы в параметрах было 50 (т.е. число перемещаемых файлов можно было бы задать).

#2:  Author: Tol!kLocation: Арзамас PostPosted: Tue Sep 07, 2010 04:09
    —
Если папки уже существуют, то...

#3:  Author: Andrey_ALocation: Сочи PostPosted: Tue Sep 07, 2010 08:14
    —
Tol!k это немного не то. Дополнительных Папок никаких нет, есть папка с файлами, имена у которых различны. Необходимо их распределить...
Можно их всех до батника выделить (параметры будут %l 50)

#4:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Tue Sep 07, 2010 09:04
    —
http://powerpro.wincmd.ru/Scripts/SelectNfiles.htm

#5:  Author: Andrey_ALocation: Сочи PostPosted: Tue Sep 07, 2010 09:17
    —
Вахмурка, и чем это поможет? Ты предлогаешь выделять вручную? В папке 56 тыс файлов... И таких не мало

#6:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Tue Sep 07, 2010 09:48
    —
Чем богаты...
Просто не приходилось сталкиваться с такой проблемой.
Возможно, сама идея отправки сообщений окну Тотала может показаться продуктивной. Далее процесс можно автоматизировать: создал директорию - послал сообщение - выделил файлы - переместил - создал директорию... По крайней мере, иных идей автоматизации у меня нет.

#7:  Author: Samwatas PostPosted: Tue Sep 07, 2010 09:48
    —
А нужно ВСЕ файлы в папке обрабатывать?

#8:  Author: BatyaLocation: Москва, Россия PostPosted: Tue Sep 07, 2010 09:52
    —
Andrey_A
vbs-скрипт:
Code:
'======================================================================
' Копирование выделенных файлов\папок по заданному количеству
'   в отдельные (создаваемые) папки

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

' Пример параметров вызова из TC:
' %L "%T" 50
'======================================================================
Option Explicit
'================= Изменяемые параметры ===============================
Const Rank = 3  'Минимальное количество цифр в создаваемых папках
'======================================================================
Dim FSO, FileList, List, F, Folder, Count, i, n, Path
Set FSO  = CreateObject("Scripting.FileSystemObject")
FileList = WScript.Arguments(0)
Folder   = WScript.Arguments(1)
Count    = CInt(WScript.Arguments(2))
List     = Split(FSO.OpenTextFile(FileList).ReadAll, vbNewLine)
If Right(Folder, 1) <> "\" Then Folder = Folder & "\"
n = 1
i = Count
For Each F In List
  If F <> "" Then
    If i >= Count Then
      If Len(CStr(n)) < Rank Then
        Path = Folder & Right(String(Rank, "0") & CStr(n), Rank) & "\"
      Else
        Path = Folder & CStr(n) & "\"
      End If
      If Not FSO.FolderExists(Path) Then FSO.CreateFolder(Path)
      i = 1
      n = n + 1
    Else
      i = i + 1
    End If
    If FSO.FileExists(F)   Then FSO.CopyFile   F, Path
    If FSO.FolderExists(F) Then
      If Right(F, 1) = "\" Then F = Left(F, Len(F) - 1)
      FSO.CopyFolder F, Path
    End If
  End If
Next

Set FSO = Nothing
Wscript.Quit 0

#9:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Sep 07, 2010 10:15
    —
А я батник написал, извратился. Smile

Code:
@echo off

if -%1==- echo Use %%L as first parameter [and number of files in subdirs as second]! & pause & goto :EOF

setlocal

set fileno=0
set fldrsz=%2
if -%fldrsz%==- set fldrsz=50

for /F "usebackq delims=" %%f in (%1) do call :do_action "%%f"

echo.
echo Moved %fileno% files.
pause

goto :EOF


:do_action

set /a fldrno=1000000000 + fileno / fldrsz
set fldrnm=%fldrno:~-5%

echo Moving %1 to subfolder %fldrnm%...
if not exist %fldrnm% md %fldrnm%
move %1 %fldrnm%

set /a fileno=fileno + 1

Первый параметр - %L, второй - число файлов в создаваемых подпапках. Если не задано, используется 50. Папка запуска должна быть текущей (т.е. поле рабочей папки пусто).

При желании число нулей в именах папок можно изменить, увеличив или уменьшив цифру в строке set fldrnm=%fldrno:~-5% - но не следует делать ее больше, чем нулей в числе, указанном в строке set /a fldrno=1000000000 + fileno / fldrsz, а также не нужно делать ее меньше, чем хватит для имен папок - тогда имена папок будут повторяться из-за отбрасывания высших разрядов.

Но похоже, тут сложности с русскими буквами в именах.

#10:  Author: Loopback PostPosted: Tue Sep 07, 2010 10:29
    —
Пока писал, уже два варианта появилось Very Happy

Ну вот тогда третий до кучи, на Autoit.

Code:

; Параметры: "%P" "%T" 50

If $CmdLine[0] < 3 Then
    MsgBox (0, "", "Недостаточно параметров, должно быть 3.")
    Exit
EndIf

Global $nDirCounter = 0
Global $nFileCounter = $CmdLine[3]

$hSearch = FileFindFirstFile($CmdLine[1] & "*.*")

While 1
    If $nFileCounter = $CmdLine[3] Then
        $nFileCounter = 0
        $nDirCounter += 1
        $sCurrentTarget = $CmdLine[2] & StringFormat("%03d", $nDirCounter)
        DirCreate($sCurrentTarget)
    EndIf
    $sFile = FileFindNextFile($hSearch)
    If @error Then Exit
    If @extended Then ContinueLoop ; без каталогов
    FileMove($CmdLine[1] & $sFile, $sCurrentTarget)
    $nFileCounter += 1
Wend

#11:  Author: Andrey_ALocation: Сочи PostPosted: Tue Sep 07, 2010 20:57
    —
Всем участникам темы огромное спасибо за скорость и за интересные идеи. Только что тестировал все три кода:
тестировал в папке с 9167 файлами с общим размером 273 мб. перемещал по 500 файлов

1. Bat произвёл операцию за 1 минуту 58 секунд (вопрос зачем выводить информацию на консоль, всё мелькает, всё и так понятно, но может это и отнимает время), с русским и пробелами справился с параметром %l
[-] для того, чтобы он работал его необходимо перемещать
2. Au3 сработал за 21 секунду, с русским языком и с пробелами справился
3. Vbs сработал за 23 секунды, с русским справился, с пробелами тоже (в нём я поменял Copy на Move - теперь он не копирует, а перемещает, параметры поменял на %L "%P" 50) [+] в нём есть параметр %L , что делает его более функциональным
Ещё раз всем спасибо, сэкономлено кучу времени!!!

#12:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Sep 07, 2010 23:14
    —
Quote:
[-] для того, чтобы он работал его необходимо перемещать

Интересно, кому я писал:
MVV wrote:
Папка запуска должна быть текущей (т.е. поле рабочей папки пусто).

Иначе, естественно, тотал установит текущей заданную папку, и файлы для перемещения будут искаться там, а не в той папке, в которой выделялись файлы. Very Happy

А насчет вывода на консоль - убери строчку echo Moving %1 to subfolder %fldrnm%..., интересно, сколько получится времени...

#13:  Author: Andrey_ALocation: Сочи PostPosted: Wed Sep 08, 2010 00:11
    —
MVV я убрал строку, но продолжает писать "Перемещено файлов 1" и так до горизонта. Время действия осталось примерно таким же

#14:  Author: kdnLocation: Москва, РФ PostPosted: Sun Oct 03, 2010 18:22
    —
Ни один из вариантов не работает.Вариант от Batya - создается лишь папка каждый раз с именем 001 и туда помещаются все эти файлы, а батники - вообще не работают - черный экран мигнет и все.

#15:  Author: FlasherLocation: Москва PostPosted: Sun Oct 03, 2010 18:58
    —
kdn wrote:
Вариант от Batya - создается лишь папка каждый раз с именем 001 и туда помещаются все эти файлы
Они копируются, а не перемещаются (из название скрипта видно). А если скопировалось только в одну папку, значит файлов не больше заданного кол-ва, либо просто не дождался, пока всё скопирует. Если автообновление не стоит, нужно обновить панель самостоятельно, тогда будут видны все записанные каталоги.
kdn wrote:
а батники - вообще не работают - черный экран мигнет и все.
Последний - не батник, а скрипт AutoIt. Все варианты - рабочие.



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page 1, 2, 3, 4, 5, 6, 7, 8, 9  Next  :| |:
Page 1 of 9

Powered by phpBB © 2001, 2005 phpBB Group