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 

Перемещение нужного количества файлов по папкам
Goto page 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
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Tue Sep 07, 2010 01:51    Post subject: Перемещение нужного количества файлов по папкам Reply with quote

Всем форумчанам привет!
Задача такая: в папке есть кучу файлов. Необходимо переместить их в папки по 50 штук в каждую. Панель создания папок не важна - можно в эту же. Имена папок - тоже (001, 002....). Я пытался сам сделать батник или скрипт, но не получается. Желательно, чтобы в параметрах было 50 (т.е. число перемещаемых файлов можно было бы задать).
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1724
Location: Арзамас

Post (Separately) Posted: Tue Sep 07, 2010 04:09    Post subject: Reply with quote

Если папки уже существуют, то...
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Tue Sep 07, 2010 08:14    Post subject: Reply with quote

Tol!k это немного не то. Дополнительных Папок никаких нет, есть папка с файлами, имена у которых различны. Необходимо их распределить...
Можно их всех до батника выделить (параметры будут %l 50)
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2491
Location: Большая деревня Москва

Post (Separately) Posted: Tue Sep 07, 2010 09:04    Post subject: Reply with quote

http://powerpro.wincmd.ru/Scripts/SelectNfiles.htm
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Tue Sep 07, 2010 09:17    Post subject: Reply with quote

Вахмурка, и чем это поможет? Ты предлогаешь выделять вручную? В папке 56 тыс файлов... И таких не мало
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2491
Location: Большая деревня Москва

Post (Separately) Posted: Tue Sep 07, 2010 09:48    Post subject: Reply with quote

Чем богаты...
Просто не приходилось сталкиваться с такой проблемой.
Возможно, сама идея отправки сообщений окну Тотала может показаться продуктивной. Далее процесс можно автоматизировать: создал директорию - послал сообщение - выделил файлы - переместил - создал директорию... По крайней мере, иных идей автоматизации у меня нет.
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Samwatas



Joined: 12 Sep 2009
Posts: 95

Post (Separately) Posted: Tue Sep 07, 2010 09:48    Post subject: Reply with quote

А нужно ВСЕ файлы в папке обрабатывать?
Back to top
View user's profile Send private message
Batya



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

Post (Separately) Posted: Tue Sep 07, 2010 09:52    Post subject: Reply with quote

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

_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
MVV



Joined: 15 Oct 2009
Posts: 4470
Location: Ростов-Дон

Post (Separately) Posted: Tue Sep 07, 2010 10:15    Post subject: Reply with quote

А я батник написал, извратился. 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, а также не нужно делать ее меньше, чем хватит для имен папок - тогда имена папок будут повторяться из-за отбрасывания высших разрядов.

Но похоже, тут сложности с русскими буквами в именах.
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Loopback



Joined: 07 Sep 2009
Posts: 735

Post (Separately) Posted: Tue Sep 07, 2010 10:29    Post subject: Reply with quote

Пока писал, уже два варианта появилось 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
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Tue Sep 07, 2010 20:57    Post subject: Reply with quote

Всем участникам темы огромное спасибо за скорость и за интересные идеи. Только что тестировал все три кода:
тестировал в папке с 9167 файлами с общим размером 273 мб. перемещал по 500 файлов

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



Joined: 15 Oct 2009
Posts: 4470
Location: Ростов-Дон

Post (Separately) Posted: Tue Sep 07, 2010 23:14    Post subject: Reply with quote

Quote:
[-] для того, чтобы он работал его необходимо перемещать

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

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

А насчет вывода на консоль - убери строчку echo Moving %1 to subfolder %fldrnm%..., интересно, сколько получится времени...
_________________
TCFS2 + TCFS2Tools: Полноэкранный режим и многое другое (обсуждение)
WINCMD.RU: AskParam, CopyTree, NTLinks, Sudo, VirtualPanel…
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Wed Sep 08, 2010 00:11    Post subject: Reply with quote

MVV я убрал строку, но продолжает писать "Перемещено файлов 1" и так до горизонта. Время действия осталось примерно таким же
Back to top
View user's profile Send private message
kdn



Joined: 19 Sep 2006
Posts: 85
Location: Москва, РФ

Post (Separately) Posted: Sun Oct 03, 2010 18:22    Post subject: Reply with quote

Ни один из вариантов не работает.Вариант от Batya - создается лишь папка каждый раз с именем 001 и туда помещаются все эти файлы, а батники - вообще не работают - черный экран мигнет и все.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sun Oct 03, 2010 18:58    Post subject: Reply with quote

kdn wrote:
Вариант от Batya - создается лишь папка каждый раз с именем 001 и туда помещаются все эти файлы
Они копируются, а не перемещаются (из название скрипта видно). А если скопировалось только в одну папку, значит файлов не больше заданного кол-ва, либо просто не дождался, пока всё скопирует. Если автообновление не стоит, нужно обновить панель самостоятельно, тогда будут видны все записанные каталоги.
kdn wrote:
а батники - вообще не работают - черный экран мигнет и все.
Последний - не батник, а скрипт AutoIt. Все варианты - рабочие.
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 1, 2, 3, 4, 5, 6, 7, 8  Next
Page 1 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