Batch para copiar archivos según nombre

Tengo una "carpeta de origen" desordenada y con muchos archivos de diferentes nombres. Luego tengo creadas diferentes "carpetas de destino". Me gustaría un script que, al ejecutarse, solicitase un nombre/string y buscase todos los archivos que contengan ese string en la "carpeta de origen" y, luego, buscase aquella carpeta de destino que contiene ese nombre y copiase lo archivos.

Les pongo un ejemplo: en la carpeta de origen hay fotos con nombre 'papa', 'mama', etc. Y, al ejecutar el batch, introduciendo el nombre "papa", buscaría todos los archivos que tuviesen ese string y los copiaría a la carpeta de destino "fotos de papa" ya creada.

Respuesta

Pued crear un script de lote (archivo por lotes o batch) usando el comando for para recorrer los archivos en la carpeta de origen y el comando xcopy para copiar los archivos a la carpeta de destino correspondiente

@echo off
Setlocal enabledelayedexpansion
set /p search_string="Introduce el nombre/string a buscar: "
set "origin_folder=C:\ruta\carpeta_de_origen"
set "destination_folder=C:\ruta\carpeta_de_destino"
for %%F in ("%origin_folder%\*%search_string%*") do (
    set "filename=%%~nxF"
    set "destination=!filename:%search_string%=!"
    if not exist "%destination_folder%\!destination!" mkdir "%destination_folder%\!destination!"
    xcopy "%%F" "%destination_folder%\!destination!" /Y
)
Echo Proceso completado.
pause

Reemplace C:\ruta\carpeta_de_origen con la ruta de tu carpeta de origen y C:\ruta\carpeta_de_destino con la ruta de tu carpeta de destino

1 respuesta más de otro experto

Respuesta

Prueba este bat:

@echo off
set "CarpOrig=D:\Carpeta origen"
set /p cadena=Introduce el literal a buscar: 
pushd %carpOrig%
for /f "tokens=*" %%x in ('dir /s /b /ad') do (
   for /f "tokens=*" %%a in ('dir /s /b /a-d *%cadena%*') do echo copy "%%a" "%%x\%%~na%%~xa"
   )
Popd

En la variable CARPORIG pones el path de la carpeta origen. Supongo que las carpetas destino están en la misma unidad, si no fuera así habría que ver como hacerlo. Mañana estaré de viaje, de modo que puede que hasta el martes no pueda contestarte si sigues con el hilo.

Perdón, hay un error. Sería así:

@echo off
set "CarpOrig=D:\Carpeta origen"
set /p cadena=Introduce el literal a buscar: 
pushd %carpOrig%
for /f "tokens=*" %%x in ('dir /s /b /ad *%cadena%*') do (
   for /f "tokens=*" %%a in ('dir /s /b /a-d *%cadena%*') do echo copy "%%a" "%%x\%%~na%%~xa"
   )
Popd

Muchisimas gracias, ahora que la web funciona lo probaré :-)

Sí. Esta pregunta ha estado mucho tiempo dando error. No sé si tendrá que ver con el arreglo pero ayer usé la opción de contactar con la página para contarles el problema, pero últimamente no parece que hagan mucho caso y, en todo caso, no me han contestado a mi dirección de correo, como prometen cuando rellenas el formulario de contacto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas