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

#31:  Author: DocWeb PostPosted: Sat Sep 10, 2011 19:04
    —
да. папки пустые - точно.

#32:  Author: FlasherLocation: Москва PostPosted: Sat Sep 10, 2011 19:28
    —
Тут вот какое дело: сортировку выделенных файлов учесть можно, а вот как учесть сортировку папок на противоположной панели я не знаю, т.к. нет спецпараметра аля %L для другой панели.
Может, есть какой-то связующий синтаксис в названиях файлов и папок?

#33:  Author: DocWeb PostPosted: Sat Sep 10, 2011 19:34
    —
связи между папками/файлами в названиях нет.

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

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

может такой вариант получится?:
есть 1000 файлов.
есть список из 100 папок. проходя по списку создаем папку и перемещаем туда 10 файлов.

#34:  Author: FlasherLocation: Москва PostPosted: Sat Sep 10, 2011 19:37
    —
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

#35:  Author: DocWeb PostPosted: Tue Sep 13, 2011 13:45
    —
Flasher Спасибо за помощь.
Все работает.

Я насколько понимаю сложно сделать создание новых папок не в текущей директории (где файлы) а в другой - например выбранной в другой панели? или указанный путь (для создания папок) в параметры добавить?

#36:  Author: FlasherLocation: Москва PostPosted: Tue Sep 13, 2011 17:26
    —
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

#37:  Author: FlasherLocation: Москва PostPosted: Tue Sep 27, 2011 02:26
    —
DocWeb
Вспомнил про макрос в Хелпере для другой панели, поправил скрипт под исходные пожелания.
При этом при указании файла-списка портабельность сохраняется.

#38:  Author: sa PostPosted: Tue Sep 27, 2011 10:12
    —
Перемещение нужного к-во файлов по папкам

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

Поправил. CaptainFlint

#39:  Author: FlasherLocation: Москва PostPosted: Wed Sep 28, 2011 10:23
    —
Что-то я тут подумал, скрипт вполне подойдёт для общих целей. Расширил функционал.
Add: Можно задействовать папки противоположной панели.
Add: Можно вводить делящее число в окне.
Add: Можно перемещать в корни выбранных папок.

#40:  Author: dam-69 PostPosted: Thu Oct 18, 2012 17:25
    —
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)

#41:  Author: Tol!kLocation: Арзамас PostPosted: Thu Oct 18, 2012 20:06
    —
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

#42:  Author: dam-69 PostPosted: Thu Oct 18, 2012 23:59
    —
del

Last edited by dam-69 on Fri Oct 19, 2012 02:53; edited 2 times in total

#43:  Author: Tol!kLocation: Арзамас PostPosted: Fri Oct 19, 2012 00:19
    —
Quote:
в папку " "
забыл кавычку
Quote:
хотелось бы в 010
припишите 0

call set "D=0%%D:~0,-%l%%%"

#44:  Author: dam-69 PostPosted: Fri Oct 19, 2012 00:31
    —
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

#45:  Author: Tol!kLocation: Арзамас PostPosted: Fri Oct 19, 2012 01:08
    —
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



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


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

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

Powered by phpBB © 2001, 2005 phpBB Group