У меня такая структура папок:
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, но могу создать пакетный файл, который это сделает.
Единственное, что вам нужно изменить, — это переменные Source и Destiny:
Установить Источник=%userprofile%\desktop\Source
Установить Destiny=%userprofile%\desktop\Destiny
Обновлено...31/07/2021
@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