【问题标题】:Windows batch - move x amount of folders+content to another folderWindows批处理-将x数量的文件夹+内容移动到另一个文件夹
【发布时间】:2013-05-08 22:01:56
【问题描述】:

我正在清理和整理我的 NAS 文件夹。

但是,我的文件夹中有超过 1800 多个文件夹,我需要将其拆分为 18 个文件夹,每个文件夹最多包含 100 个文件夹。他们移动到的文件夹的名称无关紧要,但在顶层应该是连续的。所有文件夹内容都应该一起移动。

另外,我需要一个批处理文件,它也可以反转这个。

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

我已经尝试过自己,但最终完全把它搞砸了。

【问题讨论】:

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

标签: windows batch-file directory move


【解决方案1】:

这样的?

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

【讨论】:

    【解决方案2】:

    这适用于我的有限测试并创建一个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!
        )
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 2021-11-29
      • 1970-01-01
      • 2011-06-03
      • 2018-03-28
      相关资源
      最近更新 更多