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 Previous  1, 2, 3, 4, 5, 6, 7, 8, 9  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
DocWeb



Joined: 10 Sep 2011
Posts: 10

Post (Separately) Posted: Sat Sep 10, 2011 19:04    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: Sat Sep 10, 2011 19:28    Post subject: Reply with quote

Тут вот какое дело: сортировку выделенных файлов учесть можно, а вот как учесть сортировку папок на противоположной панели я не знаю, т.к. нет спецпараметра аля %L для другой панели.
Может, есть какой-то связующий синтаксис в названиях файлов и папок?
Back to top
View user's profile Send private message
DocWeb



Joined: 10 Sep 2011
Posts: 10

Post (Separately) Posted: Sat Sep 10, 2011 19:34    Post subject: Reply with quote

связи между папками/файлами в названиях нет.

может поможет то, что есть список папок-приемников.
например в виде файла его можно иметь...

да, можно в принципе сами папки по ходу выполнения операции создавать.

может такой вариант получится?:
есть 1000 файлов.
есть список из 100 папок. проходя по списку создаем папку и перемещаем туда 10 файлов.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sat Sep 10, 2011 19:37    Post subject: Reply with quote

DocWeb wrote:
может поможет то, что есть список папок-приемников.
например в виде файла его можно иметь...
Да, такой вариант подходит.
DocWeb wrote:
да, можно в принципе сами папки по ходу выполнения операции создавать.
Ну, если уж список заведомо известен, то можно и создавать поддиректории.

Code:
'================================================================
' Рассортировка выделенных файлов по папкам (или их подкаталогам),
' выделенным в другой панели или указанным в файле, по частям

' Необходима регистрация Script Helper ActiveX for TC

' Параметры:
'  1) %L
'  2) <путь к списку>     Если "", то использовать папки неактивной панели
'  3) <имя подпапки>      Если "", то перемещать в корни папок-приёмников
'  4) <делящее число>     Если отсутствует, то указывается в окне

' Примеры:
'   a) %L "" ""
'   б) %L "" "" 5
'   в) %L "" NEWS 10
'   г) %L C:\FolderList.txt "Моя папка" 15
'================================================================

With WScript.Arguments
  On Error Resume Next
  List  = .Item(0)
  pList = .Item(1)
  SubF  = .Item(2)
  If Err.Number > 0 Then WScript.Quit
  NL = vbNewLine
  If .Count > 3 Then Div = .Item(3) Else Count Div, NL
End With
Do While Not IsNumeric(Div) And Trim(Div) > vbNullString
  W = MsgBox("Некорректный ввод данных !" & NL & NL & _
"Повторить попытку ?", 53, "      Перемещение файлов по папкам")
  If W = 4 Then Count Div, NL Else WScript.Quit
Loop
If Div = vbNullString Or Div = 0 Then WScript.Quit
Div = Abs(Fix(Div))

Set D = CreateObject("Scripting.Dictionary")
With CreateObject("Scripting.FileSystemObject")
  If pList = "" Then
    With CreateObject("TCScript.Helper")
      .LockTC True
      L = .GetTrgSelectedFiles(1)
      .LockTC False
    End With
  Else L = Split(.OpenTextFile(pList).ReadAll, vbNewLine)
  End If
  n = 0
  For Each P in L
    n = n + 1
    If P > vbNullString Then D.Add P, n
  Next
  Set TempFile = .OpenTextFile(List, 1)
  Do While Not TempFile.AtEndOfStream
    F = TempFile.ReadLine
    If F > vbNullString Then
      If .FileExists(F) Then
        For Each k in D.Keys
          If k <> "" And Fix((TempFile.Line-2)/Div)+1 = D.Item(k) Then
            k = Trim(k)
            If Right(k, 1) <> "\" Then k = k & "\"
            If SubF = "" Then SF = k Else SF = k & SubF & "\"
            If Not .FolderExists(k) Then .CreateFolder k
            If Not .FolderExists(SF) Then .CreateFolder SF
            .MoveFile F, SF
          End If
        Next
      End If
    End If
  Loop
End With
WScript.Quit

Sub Count(Di, n)
  Di = InputBox(n&n&n&n& "Введите число файлов," &n&_
 "перемещаемых в каждую папку :",_
  Space(22) & "Перемещение файлов по папкам")
End Sub


Last edited by Flasher on Wed Sep 28, 2011 10:24; edited 5 times in total
Back to top
View user's profile Send private message
DocWeb



Joined: 10 Sep 2011
Posts: 10

Post (Separately) Posted: Tue Sep 13, 2011 13:45    Post subject: Reply with quote

Flasher Спасибо за помощь.
Все работает.

Я насколько понимаю сложно сделать создание новых папок не в текущей директории (где файлы) а в другой - например выбранной в другой панели? или указанный путь (для создания папок) в параметры добавить?
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue Sep 13, 2011 17:26    Post subject: Reply with quote

DocWeb
Скрипт работает с теми путями, которые указаны в файле. Никто не мешает указывать в нём любые пути. Насчёт выбора в другой панели я вроде как уже объяснял, всё утыкается в текущую сортировку. Я мог бы подвязать переход в другую панель по Tab, но, к сожалению, параметр %L не будет перечитываться. А других вариантов я вижу.
Но это касается только учёта существующих папок.

Если требуется только создание, то действуем так:

1. В файле-списке писать только имена создаваемых папок в должном порядке.
2.
Code:
  SubF  = .Item(2)
  Div   = .Item(3)
заменить на
Code:
  Path  = .Item(2)
  SubF  = .Item(3)
  Div   = .Item(4)

Code:
            k = Trim(k)
заменить на
Code:
            k = Path & Trim(k)
3. Параметры примут такой вид: %L <путь к списку> <путь назначения\> <имя подпапки> <делящее число>
Пример: %L C:\FolderNameList.txt "%T" NEWS 10
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Tue Sep 27, 2011 02:26    Post subject: Reply with quote

DocWeb
Вспомнил про макрос в Хелпере для другой панели, поправил скрипт под исходные пожелания.
При этом при указании файла-списка портабельность сохраняется.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2563

Post (Separately) Posted: Tue Sep 27, 2011 10:12    Post subject: Reply with quote

Перемещение нужного к-во файлов по папкам

Давно режет глаз заголовок темы: нельзя ли “к-во” заменить на “количества”?

Поправил. CaptainFlint
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Wed Sep 28, 2011 10:23    Post subject: Reply with quote

Что-то я тут подумал, скрипт вполне подойдёт для общих целей. Расширил функционал.
Add: Можно задействовать папки противоположной панели.
Add: Можно вводить делящее число в окне.
Add: Можно перемещать в корни выбранных папок.
Back to top
View user's profile Send private message
dam-69



Joined: 30 Nov 2011
Posts: 13

Post (Separately) Posted: Thu Oct 18, 2012 17:25    Post subject: Reply with quote

Batya

Пожалуйста, подскажите как подправить Ваш скрипт под мою задачу:
В папке находятся файлы:
1 вариант: от 01.mp3, допустим до 99.mp3
2 вариант: от 001.mp3, допустим до 999.mp3.


Нужно нажатием кнопки создать папки и переместить в них файлы
в соответствие с вариантами:

- если 1 вариант
файлы 01.mp3 ... 09.mp3 переместить в папку 01
(файлы 00.mp3 ... 09.mp3 переместить в папку 00)
файлы 10.mp3 ... 19.mp3 переместить в папку 10
..
файлы 90.mp3 ... 99.mp3 переместить в папку 90

- если 2 вариант
файлы 001.mp3 ... 009.mp3 переместить в папку 001
(файлы 000.mp3 ... 009.mp3 переместить в папку 000)
файлы 010.mp3 ... 019.mp3 переместить в папку 010
..
файлы 990.mp3 ... 999.mp3 переместить в папку 990


Заранее Вас благодарю!

(Ваш скрипт с параметрами %L "%P" 10 - работает, лишь потом приходится переименовывать папки 01, 02, 03 ... в 01, 10, 20 ... 90)
Back to top
View user's profile Send private message
Tol!k



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

Post (Separately) Posted: Thu Oct 18, 2012 20:06    Post subject: Reply with quote

del

http://forum.wincmd.ru/viewpost.php?p=96594


Last edited by Tol!k on Fri Oct 19, 2012 01:11; edited 1 time in total
Back to top
View user's profile Send private message
dam-69



Joined: 30 Nov 2011
Posts: 13

Post (Separately) Posted: Thu Oct 18, 2012 23:59    Post subject: Reply with quote

del

Last edited by dam-69 on Fri Oct 19, 2012 02:53; edited 2 times in total
Back to top
View user's profile Send private message
Tol!k



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

Post (Separately) Posted: Fri Oct 19, 2012 00:19    Post subject: Reply with quote

Quote:
в папку " "
забыл кавычку
Quote:
хотелось бы в 010
припишите 0

call set "D=0%%D:~0,-%l%%%"
Back to top
View user's profile Send private message
dam-69



Joined: 30 Nov 2011
Posts: 13

Post (Separately) Posted: Fri Oct 19, 2012 00:31    Post subject: Reply with quote

Tol!k

с параметром "%WL" 0 - перемещает все файлы в папку "0"
с параметром "%WL" 1 - перемещает файлы в папки:
001.* ... 009.* - в папку 000 (а мне хотелось бы в 001),
010.* ... 019.* - в папку 001 (а мне хотелось бы в 010), и т.д.

----!

Устраивает с параметром "%WL" 1 , вот только строку подправил для этого:
call set "D=%%D:~0,-%l%%%0"

Спасибо, Вам Тоl!к!


Last edited by dam-69 on Fri Oct 19, 2012 01:48; edited 1 time in total
Back to top
View user's profile Send private message
Tol!k



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

Post (Separately) Posted: Fri Oct 19, 2012 01:08    Post subject: Reply with quote

Code:
@echo off &setlocal enableextensions
::  Перемещает выделенные файлы
::  в папки с именем файла без последних X символов
::  Пример параметров: "%WL" 2 "Приставка_" "_суффикс"
::  http://forum.wincmd.ru/viewpost.php?p=96594

set /a l=2 &set /a l=%2
set "pre=%~3" &set "suf=%~4"
for /f "delims=" %%f in ('type "%~1"') do call :m "%%f"
goto :eof

:m
set "D=%~n1"
call set "D=%%D:~0,-%l%%%"
if "%D%"=="" set "D=%~n1"
call set "D=%pre%%%D%%%suf%"
if not exist "%D%" md "%D%\"
move %1 "%D%\"
goto :eof
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, 9  Next
Page 3 of 9

 
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