Insertar una misma carpeta en varias carpetas automáticamente.

Violet -  
brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención   -

Hola,

tengo una carpeta "Fichas de Clientes" con 1940 subcarpetas que corresponden a los clientes nominativamente. Me gustaría insertar 4 sub-subcarpetas en las subcarpetas sin tener que copiar y pegar 1 y 1940 veces.

No quisiera pasar por un VBA que no domino.

Sin embargo, logré crear la carpeta "Fichas de Clientes" y sus subcarpetas a través de una columna de Excel y el comando cre_dossier.bat después de haber pasado por el Bloc de notas.

Quizás sea una pista.

Si alguien tiene una solución sencilla...

Gracias de antemano por sus ideas,

12 respuestas

brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención   4 152
 

Hola,

En principio no debería crear ningún problema en batch con un bucle FOR que cree una subcarpeta en cada una de las carpetas, pero no estoy seguro de entender bien la solicitud.

Quieres crear entonces en el nivel 3 4 carpetas en cada una de las carpetas, que estén vacías e idénticas para cada una de las carpetas de nivel 2?

Sería más productivo el script si proporcionas un ejemplo de esta estructura, ruta de la carpeta fuente que se llama "Fichas Clientes" si he entendido correctamente, y nombres ficticios de 2 clientes y de las 4 subcarpetas correspondientes.

0
UVMan
 

Hola,

Primero, gracias por el interés demostrado en mi solicitud, y sí, no me expreso necesariamente en lenguaje informático ...

Dicho esto, por ejemplo

Rango 1 Fichas de Clientes

          Rango 2 Cliente A

                    Rango 3 Mensajería

                    Rango 3 Ruta

                    Rango 3 Logística

                    Rango 3 Acarreo

           Rango 2 Cliente B

                    Rango 3 Mensajería

                    Rango 3 Ruta

                    Rango 3 Logística

                    Rango 3 Acarreo

Etc ...

Si los rangos 1 y 2 están bien creados en mi estructura, son los rangos 3 los que me gustaría insertar de manera "automatizada" en los archivos del Rango 2 para no reproducir 1940 pegados!

Y efectivamente, están vacíos.

¿Es más claro?

Gracias por tu ayuda,

0
brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención   4 152
 

Hola,

He reemplazado los espacios por guiones y he eliminado el acento agudo, los resultados con caracteres especiales son a menudo impredecibles y supuse que la carpeta en el rango 1 se encontraba en la raíz de E:\

Supongo que las carpetas de rango 2 ya existen.

@echo off FOR /F %%a in ('dir /a:d /b /s "E:\Fichas_Clientes"') DO SET CHEMIN=%%a & CALL :PROCESS GOTO EOF :PROCESS SET CHEMIN=%CHEMIN:~0,-1% MD %CHEMIN%\Mensajería MD %CHEMIN%\Ruta MD %CHEMIN%\Logística MD %CHEMIN%\Afrete exit /b :EOF
0
UVMan
 

¡Guau, GRACIAS, la raíz es "Y", bueno eso puedo manejarlo ...

Pero, ¿debo colocar esta codificación a través del "Símbolo del sistema"? 

Gracias por tu respuesta y el tiempo dedicado.

0
brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención   4 152
 

Por supuesto, adaptas tu camino en consecuencia, copias lo que precede en un nuevo archivo de texto, por ejemplo, en el escritorio, lo renombras como loquequiero.cmd y haces clic en él.

Si adoptas el guion, por supuesto, debes ser coherente y renombrar la carpeta Fichas_Clientes.

0
UVMan
 

Archivo de texto creado en el escritorio y llamado loquequiero.cmd / copiado/pegado ejecutado con cambio de raíz de E:\ por Y:\

Pero, debo estar fallando en alguna parte, he puesto Y como raíz, pero el verdadero nombre del servidor es:

comercial (\\192.168.2.XX)(Y:)

¿Hay alguna relación?

0
brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención   4 152
 

No puedo probar, soy jubilado, no tengo más PC en red.

Incluso si tu unidad está mapeada con la letra Y, no puedes dirigirla directamente desde la línea de comandos.

Si el nombre del PC al que quieres acceder es "comercial", intenta calificando completamente la ruta de red en la forma \\comercial\ o \\192.168.2.xx\ antes de la ruta de la carpeta de destino en esa unidad.

Probablemente sea necesario, si eso no es suficiente, acceder a esa unidad a través de un comando previo NET USE, con el nombre de usuario y la contraseña a la clave:

https://ss64.com/nt/net-use.html

0
brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención   4 152 > brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención  
 

Si tienes acceso físico al PC en cuestión, en lugar de probar la configuración hasta que funcione, es más rápido copiar el script en el puesto objetivo a través de una memoria USB o por control remoto y ejecutarlo localmente.

0
UVMan
 

... Efectivamente, estaba en la misma reflexión después de algunos intentos infructuosos, efectivamente la memoria USB puede ser una solución rápida (prueba mañana, no tengo una conmigo), y si pasara directamente por:

C:\Users\c.ch...\OneDrive - IMANY\Documents

Imagino que después de IMANY\Documents, tendré que añadir \Ficheros_Clientes ? ¿Y listo?

0
UVMan
 

¡BRAVO artista, funciona con USB!

Y un gran GRACIAS por el tiempo ahorrado.

Quizás hasta pronto,

0
brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención   4 152
 

Perfecto y mejor aún, no hay nada más molesto que los permisos de red en la línea de comandos, especialmente cuando no se puede probar...

0
UVMan
 

Hola brucine, genial, la transferencia y la creación de los subcarpetas ha funcionado.

Entonces, nueva pregunta para automatizar lo siguiente: Digamos,

tengo 2 carpetas A y B,

A-Rango 1- "Cuadrículas"

Rango 2 - unas 50 subcarpetas (clientes) en las que se encuentran ARCHIVOS de cuadrículas de tarifas

B-Rango 1- La "Dossiers_Clients" que acabo de crear con el nombre de los clientes + las subcarpetas ...

Entonces, en lugar de copiar / pegar los archivos por cliente en la carpeta "Cuadrícula" para transferirlos en el "Dossiers_Clients" y la subcarpeta correspondiente al nombre del cliente, me gustaría que la transferencia se haga directamente.

Para eso, tomaremos solo una raíz D:\ y, por supuesto, los nombres de los clientes estarán escritos de manera idéntica de un archivo a otro para la correspondencia.

¿Es posible?

¡Gracias a las celdas grises por el trabajo realizado!

0
brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención   4 152
 

Hola,

de nuevo una pregunta previa, no estoy seguro de haber entendido bien la jerarquía de los rangos.

Se trata efectivamente (he puesto fotos como tarifas) de mover los archivos de abajo a la raíz del nombre correspondiente arriba en desorden (sin crear una subcarpeta Tarifas) y según esta estructura, a corregir si es necesario?

0
brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención   4 152 > brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención  
 

Si c'est le cas, ça donne ça, tu remplaceras E: par D:
Détruire ensuite le dossier source vide soit à la main soit par une syntaxe
RD /S /Q

@echo off FOR /F %%a in ('dir /a:d /b /s "D:\Grilles"') DO SET GRILLES=%%a & CALL :PROCESS1 GOTO EOF :PROCESS1 SET GRILLES=%GRILLES:~0,-1% SET CLIENT=%GRILLES:~11% CALL :PROCESS2 exit /b :PROCESS2 MOVE %GRILLES%\*.* D:\Dossiers_Clients\%CLIENT% exit /b :EOF
0
UVMan
 

Hola brucine,

¡Esta colaboración es genial!

Sí, creo que has entendido mi solicitud y la estructura de los rangos parece corresponder.

Imagino que debo pasar por un archivo de texto para ejecutar esta función, ¿verdad?

Sin embargo, no sé sobre: "eliminar el archivo ya sea mediante una sintaxis
RD /S /Q"

Haré una prueba a pequeña escala durante el día.

Por supuesto, te mantendré informado.

Haré una prueba a pequeña escala para ver si funciona.

Hasta luego,

0
brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención   4 152
 

Hola,

No, es un script ejecutable toto.cmd, como antes.

Para probar sin afectar (simulación simple) utiliza un segundo script modificado como sigue:
 

@echo off FOR /F %%a in ('dir /a:d /b /s "E:\Grilles"') DO SET GRILLES=%%a & CALL :PROCESS1 GOTO EOF :PROCESS1 SET GRILLES=%GRILLES:~0,-1% SET CLIENT=%GRILLES:~11% CALL :PROCESS2 exit /b :PROCESS2 rem MOVE %GRILLES%\*.* E:\Dossiers_Clients\%CLIENT% ROBOCOPY /L /MOV /NP /NS /NJH /NJS "%GRILLES%" "E:\Dossiers_Clients\%CLIENT%" pause exit /b :EOF

El comando ROBOCOPY te dará una salida en pantalla de los archivos "copiados" y de su ubicación sin ninguna acción.

Supongo que al final de la operación la carpeta E:\Grilles y sus subcarpetas se han vuelto innecesarias; o las elimino manualmente con el ratón, o escribo justo antes de :EOF

RD /S /Q "E:\Grilles"

0
UVMan
 

Finalmente, vuelvo sobre lo que validé, porque no es exactamente eso ...

Adjunto, mi estructura de ARCHIVOS Excel de tablas de tarifas (finalmente no son subcarpetas o la carpeta principal sería el nombre del cliente).

La idea es hacer coincidir un archivo Excel que lleve por ejemplo el nombre "test 2023" con raíz D:\"Grilles", dentro de una carpeta "test 2023" (mismo nombre) con raíz D:\"Doccisers_Clients".

Dicho de otra manera, hacer entrar un archivo en una carpeta del mismo nombre que tiene la misma raíz.

¿Es más claro y realizable?

Gracias por todas estas neuronas en ebullición.

0
brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención   4 152
 

Lo que se concibe bien se enuncia claramente...

Habrá que deshacerse de la extensión de archivo (.xls) en el nombre de la carpeta, sigo teniendo reservas sobre los espacios en los nombres de archivo (y por lo tanto de carpetas); supongo que la nueva carpeta debe tener el nombre completo del archivo fuente, no una parte que podría ser común (2023) de lo contrario se va a volver infecto, y que las carpetas destino no existen previamente.

También atención si los nombres de archivo son muy largos, podemos llegar a ser rechazados por una longitud excesiva del camino de acceso a la carpeta y luego al archivo destino.

Antes de volver a comenzar una vez más, ¿así?

Antes:


Después:
 


 

0
brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención   4 152 > brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención  
 

He quitado 3 archivos entre "antes" y "después" para ganar tiempo, pero eso no cambia nada a la cuestión, si no lo hubiera hecho, los habríamos encontrado "después".

0
UVMan
 

... ¡Nicolas Boileau!

En el archivo adjunto, creo que hablaremos el mismo idioma.

¿Es mejor así?

0
brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención   4 152
 

¿Todavía no estoy seguro.

Por ejemplo, el expediente ALU Y PLÁSTICO 2023 ya existe previamente en Dossiers_Clients (qué idea tan extraña...) o debo crear uno antes de mover el archivo ALU Y PLÁSTICO 2023.xls que se encuentra en la carpeta Grilles y que tiene exactamente el mismo nombre?

Pregunta subsidiaria que es importante y que no vemos ya que no se ven las extensiones, la necesitaremos para hacer limpieza, ¿son todos archivos xls con una versión antigua de Excel, no xlsx?

0
UVMan
 

Entonces, para ser sincero, voy a cambiar previamente el nombre de los archivos .xls para que correspondan a las carpetas de los clientes, en la Carpeta_Clientes.

Así que NO HACE FALTA CREARLO.

Todos los nombres de los clientes ya existen EN la carpeta "Carpeta_Clientes".

Y sí, versión antigua de Excel, así que .xls para los archivos.

0
brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención   4 152
 

eso, si es la versión definitiva, no es complicado.

 

@echo off FOR /F %%a in ('dir /b "E:\Grilles"') DO SET FICHIER=%%a & CALL :PROCESS1 pause GOTO EOF :PROCESS1 SET FICHIER=%FICHIER:~0,-1% SET DOSSIER=%FICHIER:~0,-4% rem MOVE E:\Grilles\%FICHIER% E:\Dossiers_Clients\%DOSSIER% XCOPY /L /I /F "E:\Grilles\%FICHIER%" "E:\Dossiers_Clients\%DOSSIER%" exit /b :EOF

Las líneas pause, XCOPY y el prefijo rem son para probar en la pantalla sin hacer nada.
Si el resultado es satisfactorio, quita pause y elimina la línea XCOPY (o bien quita el rem delante de MOVE y ponlo delante de XCOPY).

0
UVMan
 

Prueba realizada a pequeña escala.

Resultado: ¡MÁGICO!

Me extiendo a todos los Archivos/Carpetas, si tengo tiempo durante el día.

Un gran GRACIAS por este acompañamiento ...

"No es complicado" dice brucine ... ¡Pero aún así!!!

Hasta pronto tal vez ...

0
brucine Mensajes publicados 24727 Fecha de registro   Estado Miembro Última intervención   4 152
 

Olvidé que había espacios en tus nombres de archivo, si no quieres tener problemas con el comando MOVE, reemplázalo por:

MOVE "E:\Grilles\%FICHIER%" "E:\Dossiers_Clients\%DOSSIER%"

y quita por supuesto el rem antes de ejecutarlo

0