Estoy intentando archivar una gran cantidad de archivos solo de subcarpetas con un nombre específico. También me gustaría mantener la estructura de carpetas original para que a mi equipo le resulte sencillo acceder a los archivos archivados.
Hasta ahora, he descubierto cómo hacer esto para nombres de archivos específicos usando robocopy, pero parece que no puedo hacer que esto funcione para carpetas específicas.
robocopy "c:\folder1[wildcard?]\obsolete" "c:\folder2\" \E
ejemplo:
c:\folder1\client1\obsolete\
c:\folder1\client1\obsolete\ (files & folders I'd like to copy)
c:\folder1\client1\project1\
c:\folder1\client1\file.txt
c:\folder1\client2\project1\
c:\folder1\client2\project1\obsolete\ (files & folders I'd like to copy)
c:\folder1\client2\project2\
c:\folder1\client3\obsolete\
c:\folder1\client3\obsolete\ (files & folders I'd like to copy)
resultado:
c:\folder2\client1\obsolete\
c:\folder2\client1\obsolete\ (files & folders)
c:\folder2\client2\project1\obsolete\
c:\folder2\client2\project1\obsolete\ (files & folders)
c:\folder2\client3\obsolete\
c:\folder2\client3\obsolete\ (files & folders)
Respuesta1
Esto debería hacer el trabajo:
@ECHO OFF
SETLOCAL EnableDelayedExpansion
REM **************************************************
SET source_dir=C:\folder1
SET target_dir=C:\folder2
SET wildcard=obsolete
REM **************************************************
FOR /D /R %%G IN ("%source_dir%") DO (
SET "folder_name=%%G"
ECHO !folder_name! | FINDSTR /R "%wildcard%" >nul && CALL :copy
)
ECHO. & ECHO. & ECHO. & ECHO. & ECHO. & ECHO Done^^!
PAUSE
EXIT
:copy
SET target_folder_name=!folder_name:%source_dir%\=!
SET endbit=!target_folder_name:*%wildcard%=!
SET target_folder_name=!target_folder_name:%endbit%=!
SET endbit=!folder_name:*%wildcard%=!
SET folder_name=!folder_name:%endbit%=!
ROBOCOPY "!folder_name!" "%target_dir%\!target_folder_name!" /E
EXIT /B
Distingue wildcard
entre mayúsculas y minúsculas, a menos que agregue la /I
opción a FINDSTR
:
ECHO !folder_name! | FINDSTR /I /R "%wildcard%" >nul && CALL :copy