Перемещение нужного количества файлов по папкам
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
связи между папками/файлами в названиях нет.
может поможет то, что есть список папок-приемников.
например в виде файла его можно иметь...
да, можно в принципе сами папки по ходу выполнения операции создавать.
может такой вариант получится?:
есть 1000 файлов.
есть список из 100 папок. проходя по списку создаем папку и перемещаем туда 10 файлов.
может поможет то, что есть список папок-приемников.
например в виде файла его можно иметь...
да, можно в принципе сами папки по ходу выполнения операции создавать.
может такой вариант получится?:
есть 1000 файлов.
есть список из 100 папок. проходя по списку создаем папку и перемещаем туда 10 файлов.
Да, такой вариант подходит.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
Скрипт работает с теми путями, которые указаны в файле. Никто не мешает указывать в нём любые пути. Насчёт выбора в другой панели я вроде как уже объяснял, всё утыкается в текущую сортировку. Я мог бы подвязать переход в другую панель по Tab, но, к сожалению, параметр %L не будет перечитываться. А других вариантов я вижу.
Но это касается только учёта существующих папок.
Если требуется только создание, то действуем так:
1. В файле-списке писать только имена создаваемых папок в должном порядке.
2.заменить на
заменить на 3. Параметры примут такой вид: %L <путь к списку> <путь назначения\> <имя подпапки> <делящее число>
Пример: %L C:\FolderNameList.txt "%T" NEWS 10
Скрипт работает с теми путями, которые указаны в файле. Никто не мешает указывать в нём любые пути. Насчёт выбора в другой панели я вроде как уже объяснял, всё утыкается в текущую сортировку. Я мог бы подвязать переход в другую панель по 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)Пример: %L C:\FolderNameList.txt "%T" NEWS 10
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)
Пожалуйста, подскажите как подправить Ваш скрипт под мою задачу:
В папке находятся файлы:
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 Пт окт 19, 2012 01:11, всего редактировалось 1 раз.
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!к!
с параметром "%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 раз.
Код: Выделить всё
@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