Показать полную графическую версию : [решено] Рандомное копирование файлов по критерию
Прочесал форум, находил схожие задачи, но не видел конкретно такой.
Суть следующая. Есть папка с файлами. Нужно чтобы файлы внутри этой папки, рандомно разделились в группы по 5 файлов и раскидались в новые папки, согласно своим группам.
Т.е. Есть папка с 1500 файлами. Применяем к ней скрипт. В указанной директории создаётся 300 папок, в каждой из которых по 5 файлов выбранных случайно.
Рандом в данной операции играет важную роль.
Искренне надеюсь на вашу помощь.
Прочесал форум, находил схожие задачи, но не видел конкретно такой. »
Рандом в данной операции играет важную роль. »
Искренне надеюсь на вашу помощь. »
Рандом, конечно же, играет наиважнейшую роль в упорядочивании расположения файлов на диске, ага :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
Рандом, конечно же, играет наиважнейшую роль в упорядочивании расположения файлов на диске, ага »
А что, я тут как-то задавал чисто практический для меня вопрос: как к тысяче и более файлов приписать случайный числовой префикс, чтобы затем эти файлы можно было положить на флешку с FAT – т.е. чтобы при копировании на FAT по алфавиту они располагались там в случайном порядке относительно исходных имён. Результатом я был доволен. ;)
А что, я тут как-то задавал чисто практический для меня вопрос: как к тысяче и более файлов приписать случайный числовой префикс »
Far Manager + Visual renaming files plugin, маска для имени — «[R]_[N]» ;).
Iska, Да я и для TotalCmd позже нашёл плагин RandomWDX_1_0_1. Но ваше как раз решение батника пригодилось напрямую: надо было иметь пятизначные числа с лидирующими нулями в случае, если значность меньше. :)
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
Если не требуется, чтобы префиксы никак не дублировались, красные строки можно удалить
т.е. чтобы при копировании на FAT по алфавиту они располагались там в случайном порядке относительно исходных имён. »
Ну, это несколько другая задача, действительно, имеющая практическое значение. А у ТС-а, "чисто" непрактическая задача, т.е. задача на поиск решения, всего лишь. То бишь, в данном случае, суть задачи абсолютно неважна, важен поиск решения... а мы, предоставляя ему решение, тем самым оказываем медвежью услугу... увы.
Уже не актуально? »
Ну это ж была "конечная" задача, и развития её с самого начала не просматривалось: лежит тот батничек у меня в папке, в которой файлы периодически удаляются и добавляются, периодически перетряхиваю им последовательность, задачу свою выполняет, мы с женой довольны. :)
Но спасибо — посмотреть другие методы тоже бывает полезно.
Как-то так »
Огромное спасибо, очень выручили, программа работает идеально!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.