Войти

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


krbmoney
25-03-2012, 14:43
Здравствуйте, прошу помощи в создании батника.

В одной папке имеется множество папок с файлами, нужно определенное кол-во (допустим 500 или лучше рендомом от 400 до 500) папок раскидать в новые директории (Название значение не имеет, можно цифровые).

Пример: в одной папке 10.000 папок, нужно рэндомно все эти 10.000 переместить в, допустим, 21 папку.

Iska
25-03-2012, 20:29
Практического применения сему не вижу.

krbmoney
25-03-2012, 20:42
А реализовать такое все же можно или нельзя?

Iska
25-03-2012, 23:01
Можно. Но не зная цели — не вижу смысла заниматься реализацией сего.

krbmoney
26-03-2012, 05:06
Цель - упростить работу с папками. Было бы удобней, если все папки будут более компактно расположены в других папках.

Iska
26-03-2012, 05:48
Это не цель. Не вижу смысла один хаос менять на другой.

Расскажите про область применения, в которой требуется 10000 папок в одной папке.

krbmoney
26-03-2012, 06:52
У меня на внешнем жестком диске есть папка, в которую наскачивал множество чего. Хочу все это обработать, вручуню просмотреть, допустим в день я могу просмотреть 200 папок. Эксплорер очень долго открывает все. Нужно все раскидать по папкам, чтобы удобней стало. Знал бы в какой папке был и что делал.

Iska
26-03-2012, 08:14
Эксплорер очень долго открывает все. »
Первое открытие в Проводнике папки с таким количеством папок, действительно, занимает некоторое, не слишком большое время задержки. Последующие открытия (в том же сеансе) — нет. Открытие папки в 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