Показать полную графическую версию : [решено] Переместить папки в папки
krbmoney
25-03-2012, 14:43
Здравствуйте, прошу помощи в создании батника.
В одной папке имеется множество папок с файлами, нужно определенное кол-во (допустим 500 или лучше рендомом от 400 до 500) папок раскидать в новые директории (Название значение не имеет, можно цифровые).
Пример: в одной папке 10.000 папок, нужно рэндомно все эти 10.000 переместить в, допустим, 21 папку.
Практического применения сему не вижу.
krbmoney
25-03-2012, 20:42
А реализовать такое все же можно или нельзя?
Можно. Но не зная цели — не вижу смысла заниматься реализацией сего.
krbmoney
26-03-2012, 05:06
Цель - упростить работу с папками. Было бы удобней, если все папки будут более компактно расположены в других папках.
Это не цель. Не вижу смысла один хаос менять на другой.
Расскажите про область применения, в которой требуется 10000 папок в одной папке.
krbmoney
26-03-2012, 06:52
У меня на внешнем жестком диске есть папка, в которую наскачивал множество чего. Хочу все это обработать, вручуню просмотреть, допустим в день я могу просмотреть 200 папок. Эксплорер очень долго открывает все. Нужно все раскидать по папкам, чтобы удобней стало. Знал бы в какой папке был и что делал.
Эксплорер очень долго открывает все. »
Первое открытие в Проводнике папки с таким количеством папок, действительно, занимает некоторое, не слишком большое время задержки. Последующие открытия (в том же сеансе) — нет. Открытие папки в Far Manager'е не вызвало задержек и с первого раза. В Total Commander время задержки примерно соответствует Проводнику, но — при каждом входе в папку.
Как-то так:
@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFolder=H:\003
set sDestFolder=H:\004
set /a lGroup = 400
set /a lCount = 0
set /a lNewFolder = 0
for /d %%i in ("%sSourceFolder%\*.*") do (
set /a lCount += 1
set /a lMod = lCount %% lGroup
if !lMod! equ 1 (
set /a lNewFolder += 1
set sTempValue=0000!lNewFolder!
set sNewFolder=%sDestFolder%\!sTempValue:~-5!
md "!sNewFolder!" && echo Create folder [!sNewFolder!]
)
move "%%i" "!sNewFolder!" && echo Move folder [%%i]
)
endlocal
exit /b 0
где:
* «sSourceFolder» — исходная папка, откуда будут браться папки;
* «sDestFolder» — целевая папка, куда будут переноситься папки по группам из папки «sSourceFolder»;
* «lGroup» — число папок для переноса в одной группе.
Скрипт рассчитан на создание до 10000 групп. Новые папки, куда будет производиться перенос, именуются цифрами: «00001», «00002» и т.д.
krbmoney
26-03-2012, 09:01
Круто, спасибо!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.