Hack x Crack - Comunidad de Seguridad informática

Programación => Scripting => Batch / Bash => Mensaje iniciado por: miniadri en Julio 25, 2018, 12:22:14 am

Título: Por favor, Ayuda para copiar un archivo en varias subcarpetas
Publicado por: miniadri en Julio 25, 2018, 12:22:14 am
Hola, este es mi primer mensaje, he estado mirando varios tutoriales y códigos pero entre que no entiendo mucho, y no encuentro justo lo que busco me estoy volviendo loco.
Mi idea es crear un .bat que me haga la automatización de crear unas carpetas (o duplicar la principal y generar copias de esa carpeta), y dentro de cada carpeta generada poner un archivo excel que ya tengo preparado.
No he conseguido duplicar las carpetas y que al mismo tiempo me modifique el nombre (que sea consecutivo la numeración, conseguía copiarla 1 única vez), así que he creado un método a través de una macro de excel que me ha servido para salir del paso.
El esquema sería algo así, la carpeta madre "NombreProducto", y dentro las subcarpetas "NombreProducto_000-001" y así hasta el número que decida poner al final, y dentro de cada una de esas carpetas, un archivo Excel que ya tengo creado.
NombreProducto
    |->>NombreProducto_000-001
    |      |->>>>Excel
    |->>NombreProducto_000-002
    |      |->>>>Excel
...........
    | ->>NombreProducto_000-xxx
    |       |->>>>Excel

No sé qué método sería más fácil, si duplicar una carpeta x veces y que continúe la numeración y ya tenga el excel dentro al ser una copia de una carpeta, o si crear las carpetas por un lado y lo siguiente copiar el archivo excel en cada subcarpeta creada de manera automática.
El lenguaje me daría igual que sea en python, bash, un script en linux, etc, pero si pudiera ser para usarlo directamente en Windows mejor, por eso al final lo he puesto en este subforo.

Espero que alguien pueda echarme un cable porque ya no se me ocurre nada más.
Un saludo y muchas gracias de antemano a quien me ayude con lo que sea.
Título: Re:Por favor, Ayuda para copiar un archivo en varias subcarpetas
Publicado por: miniadri en Julio 26, 2018, 12:18:54 am
Bueno, he conseguido crear un scritp en linux que me hace el apaño, pero al intentar pasarle como parámetro el número de carpetas no consigo que funcione, y ya de ponerle nombre o ruta para las carpetas ni hablamos..., pero bueno, edito el script con nano y lo pongo a mano.

El código es algo como:
for numerocarpeta {1..10..1};
do
cp -r "/home/user/test/producto_000-00" "/media/compartida/producto/producto_000-00"$numerocarpeta"/"
done

Donde el 10 es el número que cambio a mano para hacer la cantidad de carpetas deseadas. La ruta /media es porque tengo una carpeta compartida con Windows y elijo esa ruta para que me las genere directamente en Windows desde una máquina virtual Debian.
Ahora mismo tengo que cambiar a mano el número 10 por el que necesite, y la ruta debo crearla a mano (si en la compartida no existe la carpeta "Producto", no me genera las carpetas, creo que había una opción con el comando cp para que creara el árbol de directorios completo, por lo que si puedo pasarle directamente el nombre, puedo intentar hacer que me genere todo con algo así:
"/media/compartida/"$nombreproducto"/" y luego "$nombreproducto"_000-00"$numerocarpeta"/"
Pero como no sé hacer que reconozca ni el parámetro número de carpetas ni el nombre, ando despistado. Creo que el del nombre de la ruta puedo apañarlo, pero el de numero de carpetas he probado varias maneras y no tengo ni idea de qué más hacer...

A ver si alguien pudiera echarme una mano con el tema del número de carpetas y ya pruebo yo con el nombre de la carpeta.

Un saludo y gracias de antemano.
Título: Re:Por favor, Ayuda para copiar un archivo en varias subcarpetas
Publicado por: EdSon en Agosto 02, 2018, 06:20:25 am
Saludos,

- Un Batch para Windows creando carpetas recursivamente y copiando el fichero de excel indicado, copiar y guardar el código como un fichero .bat o .cmd (Ej.: programa.cmd)

-- Los datos ingresados NO deben de tener comillas:
     NO =>"pan duro"
     SI => pan duro
     NO => "C:\Mi carpeta\fichero excel.xls"
     SI => C:\Mi carpeta\fichero excel.xls

-- La ruta al fichero de excel debe estar completa y debe incluir la extensión fichero (ruta y nombre completos) Ej.: C:\Mi carpeta\fichero excel.xls

Código: [Seleccionar]
@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET /p producto="Indique el nombre del producto (Ej.: Cebollas): "
SET /p ini="Indique el inicio de la numeracion (Ej.: 1): "
SET /p fin="Indique el final de la numeracion (Ej: 100): "
SET /p file="Indique la ruta completa del fichero (Ej.: c:\users\pepito\excel.xls): "

MD "%producto%"
CD "%producto%"

FOR /l %%G in (%ini%, 1, %fin%) do (
  SET /a "num=%%G+1000"
  SET num=!num:~1!
  MD "%producto%_000-!num!"
  COPY "%file%" "%producto%_000-!num!"
)
CLS
TREE /f
PAUSE