Войти

Показать полную графическую версию : [решено] Рандомное копирование файлов по критерию


arioo7
04-01-2019, 11:13
Прочесал форум, находил схожие задачи, но не видел конкретно такой.

Суть следующая. Есть папка с файлами. Нужно чтобы файлы внутри этой папки, рандомно разделились в группы по 5 файлов и раскидались в новые папки, согласно своим группам.
Т.е. Есть папка с 1500 файлами. Применяем к ней скрипт. В указанной директории создаётся 300 папок, в каждой из которых по 5 файлов выбранных случайно.

Рандом в данной операции играет важную роль.

Искренне надеюсь на вашу помощь.

YuS_2
04-01-2019, 12:52
Прочесал форум, находил схожие задачи, но не видел конкретно такой. »
Рандом в данной операции играет важную роль. »
Искренне надеюсь на вашу помощь. »
Рандом, конечно же, играет наиважнейшую роль в упорядочивании расположения файлов на диске, ага :biggrin:
За "изобретение" - 5, по предмету - 2. Профессор, конечно, лопух, но аппаратура при нём, при нём! :)
Помощь - предполагает наличие приложенных усилий, причем не для поиска готового решения, а приложенных усилий именно для решения задачи... есть внятные попытки решить задачу самостоятельно, студент?

megaloman
04-01-2019, 19:57
@Echo Off
cls
Set "BoxIn=Z:\Box_In"
Set "Mask=*.*"
Set "BoxOut=Z:\Box_Out"
Set /A QQ=5

Set /A Max=10000

Set /A N=%Max%
FOR %%f IN ("%BoxIn%\%Mask%") DO Call :Count "%%~nxf"

Set /A M=N
Set /A i=0
Set /A ND=%Max%

Set /A QQQ=QQ+%Max%
Set /A L=0

:Begin
Set /A j=%Random%
Set /A j=%Max%+1+%j%-(%j%/(%N%-%Max%))*(%N%-%Max%)

If %L%==0 If %i%==0 Set /A ND+=1
If %L%==0 If %i%==0 Md "%BoxOut%\%ND%"
Call :MyMove "F%j%" "%%F%j%%%" "%BoxIn%" "%BoxOut%\%ND%"||(Set /A L=1 &GoTo :Begin)
Set /A L=0
Set /A i+=1
Set /A M-=1
If %M% GTR %Max% If %i% LSS %QQ% GoTo :Begin
Set /A i=0
If %M% GTR %QQQ% GoTo :Begin
If %M% GTR %Max% Set /A ND+=1
If %M% GTR %Max% (Md "%BoxOut%\%ND%" & >nul Move "%BoxIn%\%Mask%" "%BoxOut%\%ND%\")
pause
GoTo :Eof

:Count
Set /A N+=1
Set "F%N%=%~1"
GoTo :Eof

:MyMove
If %2=="" Exit /B 1
Set "%~1="
>nul Move /Y "%~3\%~2" "%~4\"
Exit /B 0

mwz
04-01-2019, 23:42
Рандом, конечно же, играет наиважнейшую роль в упорядочивании расположения файлов на диске, ага »

А что, я тут как-то задавал чисто практический для меня вопрос: как к тысяче и более файлов приписать случайный числовой префикс, чтобы затем эти файлы можно было положить на флешку с FAT – т.е. чтобы при копировании на FAT по алфавиту они располагались там в случайном порядке относительно исходных имён. Результатом я был доволен. ;)

Iska
05-01-2019, 00:06
А что, я тут как-то задавал чисто практический для меня вопрос: как к тысяче и более файлов приписать случайный числовой префикс »
Far Manager + Visual renaming files plugin, маска для имени — «[R]_[N]» ;).

mwz
05-01-2019, 01:30
Iska, Да я и для TotalCmd позже нашёл плагин RandomWDX_1_0_1. Но ваше как раз решение батника пригодилось напрямую: надо было иметь пятизначные числа с лидирующими нулями в случае, если значность меньше. :)

Iska
05-01-2019, 01:56
mwz, тут, увы, этого нет:
[R] Случайное число от 0 до 32767.
— просто число, достаточно ограниченное (можно, конечно, смультиплицировать сам шаблон), и без лидирующих нулей.

megaloman
05-01-2019, 09:06
mwz, тут как-то задавал чисто практический для меня вопрос: как к тысяче и более файлов приписать случайный числовой префиксУже не актуально? (http://forum.oszone.net/thread-287115.html)@Echo Off
cls
Set "BoxIn=Z:\Box_In\Alll"
Set "Mask=*.*"

Set /A Max=10000

Set /A N=%Max%
FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D /O:-D /T:C`) DO Call :Count "%%~nxf"
FOR /F "usebackq tokens=1* delims==" %%f IN (`Set "@@"`) DO Call :MyRen "%BoxIn%\%%g" "%%g" %Max%

Set /A N=%Max%
FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D /O:N`) DO Call :Count "%%~nxf"
Set /A N=%Max%
FOR /F "usebackq tokens=1* delims==" %%f IN (`Set "@@"`) DO Call :MyRen2 "%BoxIn%\%%g" "%%g" %Max%
pause
GoTo :Eof

:Count
Set /A N+=1
Set "@@%N%=%~1"
GoTo :Eof

:MyRen
Set /A j=%Random%+%3
Ren %1 "%j%_%~2"
Exit /B 0

:MyRen2
Set /A N+=1
Set "New=%~2"
Ren %1 "%N%_%New:*_=%"
Exit /B 0
Если не требуется, чтобы префиксы никак не дублировались, красные строки можно удалить

YuS_2
05-01-2019, 11:29
т.е. чтобы при копировании на FAT по алфавиту они располагались там в случайном порядке относительно исходных имён. »
Ну, это несколько другая задача, действительно, имеющая практическое значение. А у ТС-а, "чисто" непрактическая задача, т.е. задача на поиск решения, всего лишь. То бишь, в данном случае, суть задачи абсолютно неважна, важен поиск решения... а мы, предоставляя ему решение, тем самым оказываем медвежью услугу... увы.

mwz
05-01-2019, 19:47
Уже не актуально? »

Ну это ж была "конечная" задача, и развития её с самого начала не просматривалось: лежит тот батничек у меня в папке, в которой файлы периодически удаляются и добавляются, периодически перетряхиваю им последовательность, задачу свою выполняет, мы с женой довольны. :)

Но спасибо — посмотреть другие методы тоже бывает полезно.

arioo7
06-01-2019, 09:23
Как-то так »

Огромное спасибо, очень выручили, программа работает идеально!




© OSzone.net 2001-2012