我不知道标题是否足够清晰。 这就是我想要做的事情:
实际文件夹结构:
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
不幸的是它不起作用。 它似乎正在做的是:
你们能帮助我吗?
由于
答案 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 ..
)