移动子文件夹

时间:2017-08-23 17:49:37

标签: batch-file cmd robocopy

我不知道标题是否足够清晰。 这就是我想要做的事情:

实际文件夹结构:

Root_Folder
 |
 +-- Folder1
 |    
 +-- Folder2
 |  |  
 |  +-- file 2.1
 |    
 +-- Folder3
 |  |  
 |  +-- file 3.1
 |  +-- file 3.2
 |    
 +-- Folder 4
 |  |  
 +  |-- Subfolder 4.1

我想要的文件夹结构:

Root_Folder
 |
 +-- Folder1
 |  |
 |  +-- Documents
 |
 +-- Folder2
 |  |  
 |  +-- Documents
 |  |  |
 |  |  +-- file 2.1
 |    
 +-- Folder3
 |  |  
 |  +-- Documents
 |  |  |
 |  |  +-- file 3.1
 |  |  +-- file 3.2
 |    
 +-- Folder 4
 |  |  
 |  +-- Documents
 |  |  |
 |  |  +-- Subfolder 4.1

我提出的脚本:

SET ROOT_FOLDER=C:\Folder\Root
SET WORK_FOLDER=C:\Temp
SET FILE_LIST=%WORK_FOLDER%\list.txt
DIR %ROOT_FOLDER% >%FILE_LIST% /a:d /b
CD %ROOT_FOLDER%

FOR /F %%i IN (%FILE_LIST%) DO ROBOCOPY "%ROOT_FOLDER%\%%i" "%ROOT_FOLDER%\%%i\Documents" /MOVE /MIR /SEC /R:1 /W:1 /COPYALL

不幸的是它不起作用。 它似乎正在做的是:

  • 在每个FolderX中,创建文档子文件夹: good
  • 将folderX中的子文件夹移入其中: good
  • 但是在其中还创建了另一个 Documents 子文件夹: bad
  • 将folderX下的文件移入此** Documents *子文件夹: bad

你们能帮助我吗?

由于

2 个答案:

答案 0 :(得分:0)

问题是ROBOCOPY正在创建Documents文件夹并开始复制,但/MOVE参数告诉它移动文件和目录,以便在第一个文件夹内再次创建Documents文件夹。 / p>

尝试将/XD "Documents"参数添加到您的ROBOCOPY。

像这样:

SET ROOT_FOLDER=C:\Folder\Root
SET WORK_FOLDER=C:\Temp
SET FILE_LIST=%WORK_FOLDER%\list.txt
DIR %ROOT_FOLDER% >%FILE_LIST% /a:d /b
CD %ROOT_FOLDER%

FOR /F %%i IN (%FILE_LIST%) DO ROBOCOPY "%ROOT_FOLDER%\%%i" "%ROOT_FOLDER%\%%i\Documents" /MOVE /MIR /SEC /R:1 /W:1 /COPYALL /XD "Documents"

答案 1 :(得分:0)

据我了解,您的问题是您不知道Robocopy在这种情况下做了什么。我建议你在一个简单的批处理文件中明确地实现相同的过程,所以你总是知道你在做什么:

@echo off
setlocal EnableDelayedExpansion

set "ROOT_FOLDER=C:\Folder\Root"

rem For each folder in root folder
cd "%ROOT_FOLDER%"
for /D %%a in (*) do (
   cd "%%a"

   rem Move all existent folders into "Documents" folder
   for /F "delims=" %%b in ('dir /B /A:D') do (
      md Documents 2> NUL
      move "%%b" "Documents\%%b"
   )

   rem Move all existent files into "Documents" folder
   md Documents 2> NUL
   move *.* Documents

   cd ..
)