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

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

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

DocWeb
Сообщения: 10
Зарегистрирован: Сб сен 10, 2011 18:01

Сообщение DocWeb »

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

Сообщение Flasher »

Тут вот какое дело: сортировку выделенных файлов учесть можно, а вот как учесть сортировку папок на противоположной панели я не знаю, т.к. нет спецпараметра аля %L для другой панели.
Может, есть какой-то связующий синтаксис в названиях файлов и папок?
DocWeb
Сообщения: 10
Зарегистрирован: Сб сен 10, 2011 18:01

Сообщение DocWeb »

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

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

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

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

Сообщение Flasher »

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

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

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

' Необходима регистрация 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
Последний раз редактировалось Flasher Ср сен 28, 2011 10:24, всего редактировалось 5 раз.
DocWeb
Сообщения: 10
Зарегистрирован: Сб сен 10, 2011 18:01

Сообщение DocWeb »

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

Я насколько понимаю сложно сделать создание новых папок не в текущей директории (где файлы) а в другой - например выбранной в другой панели? или указанный путь (для создания папок) в параметры добавить?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

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

1. В файле-списке писать только имена создаваемых папок в должном порядке.
2.

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

  SubF  = .Item(2)
  Div   = .Item(3)
заменить на

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

  Path  = .Item(2)
  SubF  = .Item(3)
  Div   = .Item(4)

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

            k = Trim(k)
заменить на

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

            k = Path & Trim(k)
3. Параметры примут такой вид: %L <путь к списку> <путь назначения\> <имя подпапки> <делящее число>
Пример: %L C:\FolderNameList.txt "%T" NEWS 10
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

DocWeb
Вспомнил про макрос в Хелпере для другой панели, поправил скрипт под исходные пожелания.
При этом при указании файла-списка портабельность сохраняется.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

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

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

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

Сообщение Flasher »

Что-то я тут подумал, скрипт вполне подойдёт для общих целей. Расширил функционал.
Add: Можно задействовать папки противоположной панели.
Add: Можно вводить делящее число в окне.
Add: Можно перемещать в корни выбранных папок.
dam-69
Сообщения: 13
Зарегистрирован: Ср ноя 30, 2011 12:26

Сообщение dam-69 »

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)
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Последний раз редактировалось Tol!k Пт окт 19, 2012 01:11, всего редактировалось 1 раз.
dam-69
Сообщения: 13
Зарегистрирован: Ср ноя 30, 2011 12:26

Сообщение dam-69 »

del
Последний раз редактировалось dam-69 Пт окт 19, 2012 02:53, всего редактировалось 2 раза.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

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

call set "D=0%%D:~0,-%l%%%"
dam-69
Сообщения: 13
Зарегистрирован: Ср ноя 30, 2011 12:26

Сообщение dam-69 »

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!к!
Последний раз редактировалось dam-69 Пт окт 19, 2012 01:48, всего редактировалось 1 раз.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

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

@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
Ответить