Windows批处理-移动x个文件夹数量+;将内容复制到另一个文件夹

Windows批处理-移动x个文件夹数量+;将内容复制到另一个文件夹,windows,batch-file,directory,move,Windows,Batch File,Directory,Move,我正在清理和组织我的NAS文件夹 然而,我有超过1800+的文件夹在其中,我需要有18个文件夹,每个文件夹最多包含100个文件夹分裂。他们移动到的文件夹的名称是不相关的,但在顶层应该是连续的。所有文件夹内容都应移动 此外,我需要一个批处理文件,这也逆转了这一点 之所以需要这样做,是因为我用来索引和组织文件夹和文件夹内容的程序无法轻松处理超过100个文件夹的文件夹 我已经试过了,但最后完全失败了。像这样的事 @ECHO OFF SET destination=c:\temp\ SET sourc

我正在清理和组织我的NAS文件夹

然而,我有超过1800+的文件夹在其中,我需要有18个文件夹,每个文件夹最多包含100个文件夹分裂。他们移动到的文件夹的名称是不相关的,但在顶层应该是连续的。所有文件夹内容都应移动

此外,我需要一个批处理文件,这也逆转了这一点

之所以需要这样做,是因为我用来索引和组织文件夹和文件夹内容的程序无法轻松处理超过100个文件夹的文件夹

我已经试过了,但最后完全失败了。

像这样的事

@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.

这在我的有限测试中起作用,并创建一个
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!
    )
)

你应该展示一些自己的研究成果。