我有一个这样的文件夹结构:
R:\TOPFOLDER
├───Folder_1
│ │ other File.txt
│ │
│ ├───!Downloads
│ └───other_Folder
├───Folder_2
│ │ other File.txt
│ │
│ ├───!Downloads
│ └───other_Folder
├───Folder_3
│ │ other File.txt
│ │
│ ├───!Downloads
│ └───other_Folder
├───Folder_4
│ │ other File.txt
│ │
│ ├───!Downloads
│ └───other_Folder
└───Folder_5
│ other File (2).txt
│ other File.txt
│
├───!Downloads
└───other_Folder
我想保持文件夹结构完整。每个文件夹 ( Folder_1 - Folder_n
) 可能包含其他文件和/或其他子目录。我想将它们保留在驱动器 上R:
。我只想!Downloads
将目录及其内容复制到 E:\ 。
因此结果将是:
E:\TOPFOLDER
├───Folder_1
│ └───!Downloads
├───Folder_2
│ └───!Downloads
├───Folder_3
│ └───!Downloads
├───Folder_4
│ └───!Downloads
└───Folder_5
└───!Downloads
我尝试使用 robocopy 命令:robocopy /s R:\FolderTOP\*\!Downloads E:\FolderTOP\
认为通配符代表Folder_1 - Folder_n
示例中的每个子目录名称,但出现错误。
答案1
我不太了解 powershell 但是我可以编写一个可以做到这一点的批处理文件。
您唯一需要改变的是源变量和命运变量:
设置源=%userprofile%\desktop\Source
设置 Destiny=%userprofile%\desktop\Destiny
已更新...2021 年 7 月 31 日
@echo off
:: Copy the contents of folders called "!Downloads" in the Source only
chcp 65001 > nul
Set Source=%userprofile%\desktop\Source
Set Destiny=%userprofile%\desktop\Destiny
Set "SWord=!Downloads"
if /i not "%Source:~-1%"=="\" set "Source=%Source%\"
if /i not "%Destiny:~-1%"=="\" set "Destiny=%Destiny%\"
pushd "%Source%"
for /f "Delims=" %%a in ('dir /s /ad /b *%SWord%*') do (
call :CopyFiles "%%~Fa"
)
exit
:CopyFiles
set "Folder=%~1"
Call set "Folder=%%Folder:%Source%=%%"
xcopy "%Folder%" "%Destiny%%Folder%\" /h /s /r /y /i /q
goto :EOF