Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Скрипт для распределения файлов по папкам кучками по n-ому размеру

Ответить
Настройки темы
Любой язык - Скрипт для распределения файлов по папкам кучками по n-ому размеру

Новый участник


Сообщения: 5
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


Имеется папка с файлами. Требуется переместить файлы в подпапки (Dir1, Dir2, ... ), так чтобы каждая подпапка занимала не более, скажем 20 МБ.

Заранее всем спасибо.

Отправлено: 13:04, 04-05-2013

 

Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


1. Зачем?
2. Что делать, если какие-то файлы более «скажем 20 МБ»?

Отправлено: 15:21, 04-05-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


1. Надо Для уменьшения геморроя рук. Почтовый сервер нашей замечательной фирмы ограничивает вложения 25 метрами. Принимающая сторона файлообмены отвергает — только мыло. Посему и приходится при пересылке фото делить их на описанные кучки по «скажем, 20 МБ», паковать и отправлять.
Резать архив (многотомный, всмысле) тоже не вариант (по причине криворукости принимающей стороны).
2. Таких нет и не предвидятся. В качестве исключительной ситуации можно оставлять их на месте.

Отправлено: 15:31, 04-05-2013 | #3


Ветеран


Сообщения: 1759
Благодарности: 966

Профиль | Цитировать


DmitryAnatolich, На PowerShell
Код: Выделить весь код
push-location "C:\Folder"

$files = new-object system.collections.arraylist
$cnt = 1

gci | ? { !$_.psiscontainer -and $_.length -le 20Mb } | % { $files.add($_) }

new-item -t dir "dir$cnt"

while ($files) {

    if (($size + $files[0].length) -le 20Mb) {
    
        $size += $files[0].length
        move-item $files[0] "dir$cnt"
        $files.removerange(0,1)

    } else {

        $size = 0
        $cnt += 1
        new-item -t dir "dir$cnt"

    }

}

pop-location
Где:
C:\Folder -- папка с вашими файлами
20Mb -- ограничение на размер создаваемых папок и размер файлов для перемещения
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:01, 04-05-2013 | #4


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


читать дальше »
Попробуйте так:
Код: Выделить весь код
Option Explicit

Dim strSourceFolder
Dim lngMaxSize

Dim objFSO
Dim objFile

Dim intFoldersCount
Dim strDestFolder
Dim lngSize


strSourceFolder = "E:\Песочница\0246\Source"
lngMaxSize      = 20 * 2^20

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strSourceFolder) Then
	lngSize = 0
	intFoldersCount = 1
	strDestFolder = objFSO.BuildPath(strSourceFolder, Right("0000" & CStr(intFoldersCount), Len("0000")))
	objFSO.CreateFolder strDestFolder
	
	For Each objFile In objFSO.GetFolder(strSourceFolder).Files
		If objFile.Size < lngMaxSize Then
			If lngSize + objFile.Size > lngMaxSize Then
				lngSize = 0
				intFoldersCount = intFoldersCount + 1
				strDestFolder = objFSO.BuildPath(strSourceFolder, Right("0000" & CStr(intFoldersCount), Len("0000")))
				objFSO.CreateFolder strDestFolder
			End If
			
			lngSize = lngSize + objFile.Size
			objFile.Move strDestFolder & "\"
		Else
			WScript.Echo "Size of file [" & objFile.Name & "] is [" & objFile.Size & "] that more then MaxSize [" & lngMaxSize & "]"
		End If
	Next
Else
	WScript.Echo "Source folder [" & strSourceFolder & "] not found"
End If

WScript.Quit 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:05, 04-05-2013 | #5


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


bat-файл
Код: Выделить весь код
@Echo Off

Set Where=D:\Мои документы\Мои рисунки\20130504_Прогулка_по_реке
Set Prefix=Dir
Set Max=20000000

SetLocal EnableExtensions EnableDelayedExpansion

Set /A N=1000
Set /A Size=%Max%+1

For %%f In ("%Where%\*.*") Do (
	Set /A NSize=!Size!+%%~zf
	If !NSize! GTR %Max% (
		Call :NewDir
		Set /A NSize=%%~zf
	)
	Set /A Size=!NSize!
	Move "%%f" !NDir! >nul

)
GoTo :Eof

:NewDir

Set /A N=%N%+1
Set NDir=%N:~-3%
Set NDir="%Where%\%Prefix%%NDir%\"
If Exist %NDir% GoTo :NewDir
Md %NDir%

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:37, 04-05-2013 | #6


Ветеран


Сообщения: 27449
Благодарности: 8088

Профиль | Отправить PM | Цитировать


Foreigner, megaloman — на все вкусы .

Отправлено: 21:01, 04-05-2013 | #7


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


Просто великолепно! Всем спасибо!

Отправлено: 02:08, 05-05-2013 | #8


Новый участник


Сообщения: 5
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman, кстати. Что за конструкции:
Код: Выделить весь код
!NSize!
Смотрю мануал и не нахожу ничего похожего. Однако, работает

Отправлено: 13:34, 06-05-2013 | #9


Ветеран


Contributor


Сообщения: 2735
Благодарности: 1699

Профиль | Отправить PM | Цитировать


DmitryAnatolich, Можно почитать здесь или порыться в полезных ресурсах в первой теме ветки форума

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 15:20, 06-05-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Скрипт для распределения файлов по папкам кучками по n-ому размеру

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие - [решено] Сортирование файлов по папкам (копирование по дате создания) DIMM2005 Программное обеспечение Windows 36 03-01-2020 16:54
CMD/BAT - Не срабатывает скрипт переноса файлов по размеру - !!! с условием переименования !!! dark-------13 Скриптовые языки администрирования Windows 0 19-03-2012 15:27
CMD/BAT - [решено] Перемещение файлов по размеру dark-------13 Скриптовые языки администрирования Windows 4 19-03-2012 14:31
CMD/BAT - Не работает скрипт сортировки файлов по папкам dark-------13 Скриптовые языки администрирования Windows 0 27-01-2012 23:11
CMD/BAT - [решено] Удаление одинаковых файлов по размеру Arsenik77 Скриптовые языки администрирования Windows 27 08-08-2011 04:53




 
Переход