Tengo una estructura de carpetas como esta:
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
Quiero mantener intacta la estructura de carpetas. Cada carpeta ( Folder_1 - Folder_n
) puede contener archivos adicionales y/o subdirectorios adicionales. Quiero dejarlos en el camino R:
. solo quierocopie el !Downloads
directorio y su contenido a E:\ .
Entonces el resultado sería:
E:\TOPFOLDER
├───Folder_1
│ └───!Downloads
├───Folder_2
│ └───!Downloads
├───Folder_3
│ └───!Downloads
├───Folder_4
│ └───!Downloads
└───Folder_5
└───!Downloads
Intenté usar un comando robocopy: robocopy /s R:\FolderTOP\*\!Downloads E:\FolderTOP\
pensé que el comodín representaría cada nombre de subdirectorio Folder_1 - Folder_n
en el ejemplo, pero aparece un error.
Respuesta1
No conozco muy bien PowerShell, pero puedo crear un archivo por lotes que pueda hacerlo.
Lo único que tienes que cambiar son las variables Fuente y Destino:
Establecer fuente=%userprofile%\desktop\Source
Establecer Destiny=%userprofile%\desktop\Destiny
Actualizado...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