Пакет на Windows - преместете x количество папки+съдържание в друга папка

В процес съм на почистване и организиране на моите NAS папки.

Въпреки това имам папка с над 1800+ папки в нея, трябва да я разделя на 18 папки, всяка от които съдържа максимум 100 папки. Името на папката, в която са преместени, е без значение, но на най-високо ниво трябва да е последователно. Цялото съдържание на папката трябва да бъде преместено.

Освен това имам нужда от пакетен файл, който също обръща това.

Причината, поради която това е необходимо, се дължи на програмата, която използвам за индексиране и организиране на моите папки и съдържанието на папките, с която не може да се справи лесно с папки с повече от 100 папки.

Вече се опитах, но в крайна сметка го преобърнах напълно.


person PeterDB    schedule 08.05.2013    source източник
comment
Трябва да покажеш някакво собствено изследване.   -  person Endoro    schedule 09.05.2013


Отговори (2)


Нещо като това?

@ECHO OFF

SET destination=c:\temp\
SET source=c:\windows\system32\
SET dcount=0
SET fcount=0
SETLOCAL ENABLEDELAYEDEXPANSION

MKDIR %destination%dir%dcount%


FOR /f "tokens=*" %%f in ('DIR /b /s /a:d "%source%*"') do (
  SET str=%%f
  SET str=!str:%source%=!
  MKDIR %destination%dir!dcount!\!str!
  COPY %%f %destination%dir!dcount!\!str! 1> NUL
  SET /a fcount=!fcount!+1
  IF !fcount! EQU 100 (
    SET fcount=0
    SET /a dcount=!dcount!+1
    MKDIR %destination%dir!dcount!
  )
)

ECHO DONE.

Очевидно източникът и местоназначението ще трябва да бъдат променени и няма опит за проверка на разума или да се провали грациозно поради грешки...

РЕДАКТИРАНЕ:

Първата версия рекурсивно спуска всички поддиректории и премества всяка от тях в новата структура - основно унищожавайки вътрешното им влагане и организация. Този втори запазва вътрешните структури на поддиректориите, вложени в непосредствените поддиректории на изходната директория... Изберете.

@ECHO OFF

SET destination=c:\temp\
SET source=c:\windows\system32\
SET dcount=0
SET fcount=0
SETLOCAL ENABLEDELAYEDEXPANSION

MKDIR %destination%dir%dcount%


FOR /f "tokens=*" %%f in ('DIR /b /a:d "%source%*"') do (
  MKDIR %destination%dir!dcount!\%%f
  XCOPY %source%%%f %destination%dir!dcount!\%%f /e /y 
  SET /a fcount=!fcount!+1
  IF !fcount! EQU 100 (
    SET fcount=0
    SET /a dcount=!dcount!+1
    MKDIR %destination%dir!dcount!
  )
)

ECHO DONE.
person 0x90h    schedule 09.05.2013

Това работи в моя ограничен тест и създава UNDO.BAT за възстановяване на папките там, където са били. Тествайте го сами, за да сте сигурни, че прави това, което искате.

Стойността num е броят на папките, които искате във всяка папка от най-високо ниво

f се използва за създаване на папки за съхранение - 001, 002, 003 и т.н.

Стартирайте го в папката с всички поддиректории за преместване.

@echo off
setlocal enabledelayedexpansion
set num=100
set c=0
set f=1001
set folder=%f:~-3%
del undo.bat 2>nul
for /f "delims=" %%a in ('dir /a:d /o:n /b') do (
set /a c=c+1
   md !folder! 2>nul
   move "%%a" !folder!
   echo move "!folder!\%%a" "%cd%" ^& rd !folder! 2^>nul >>undo.bat
    if !c! EQU %num% (
      set c=0
      set /a f=f+1
      set folder=!f:~-3!
    )
)
person foxidrive    schedule 09.05.2013