Crear un batch

Iniciado por yottaXT, 15 Marzo 2017, 02:24 AM

0 Miembros y 1 Visitante están viendo este tema.

yottaXT

Hola como están,

Estuve leyendo algunas guías para comenzar con los batch, y bueno he hecho varios ejercicios etc.

Ahora ya estoy en el punto que quiero hacer un bat que realice una función útil para mi.

Tengo una serie de carpetas que cada una tiene uno o 2 archivos y es bastante tedioso abrir carpeta por carpeta manualmente copiando cada archivo y pegandolo en una carpeta nueva hasta tener todos los archivos en una sola carpeta y borrar las demás que ya no tengan nada.

La primera traba que tuve fue bastante pronta, no se como decirle al bat que solo quiero que revise carpetas osea que ignore todos los demás archivos dentro de esa dirección.

El segundo problema, hay algunas carpetas dentro de esa dirección que no quiero que sean escrutadas por el bat osea que las ignore, pero lo bueno es que las carpetas que SI quiero que sean escrutadas tienen algo en común, todas tienen al inicio un símbolo de $.

Ahora explicar lo que quiero, quiero que el bat revise si existen carpetas con el signo $*.* que abra esas carpetas y copie los archivos *.* a una carpeta DESTINO, luego que borre solo la carpeta que ya ha sido procesada, al final quedara la carpeta DESTINO con todos los archivos de las carpetas ORIGEN y estas a su vez quedaran eliminadas de la ruta.

Acepto cualquier tipo de ayuda, desde porciones de código o guías, incluso manuales que expliquen ese contexto, si son muy amables y tienen tiempo el código completo no estaría mal.

Agradezco de antemano la atención brindada.

PD: De ser posible agreguen links de manuales para principiantes con muchas intenciones de aprender, de nuevo gracias.  :D

Eleкtro

#1
Cita de: yottaXT en 15 Marzo 2017, 02:24 AMEstuve leyendo algunas guías para comenzar con los batch, y bueno he hecho varios ejercicios etc.

Ahora ya estoy en el punto que quiero hacer un bat que realice una función útil para mi.

Mi primer consejo: No uses Batch.

"¿Por qué?" -Por que no.

"¿Pero por qué no?" -Por que es una pérdida de tiempo y consumo innecesario. Puedes hacer lo mismo de forma más simple y mucho más práctica y eficiente en cualquier otro lenguaje; de hecho a Batch no se le puede considerar un lenguaje de programación.

Te lo dice alguien que empezó en Batch y estuvo varios años hasta dominar el "lenguaje" a la perfección, y luego se dió cuenta del mundo que habia por descubrir áhí fuera más allá de Batch... y mucho más gratificante que Batch.

Cita de: yottaXT en 15 Marzo 2017, 02:24 AMAcepto cualquier tipo de ayuda, desde porciones de código o guías, incluso manuales que expliquen ese contexto, si son muy amables y tienen tiempo el código completo no estaría mal.

Aunque quizás no te lo parezca ahora mismo, advertirte sobre la inutilidad de Batch es la mejor ayuda que te pueden brindar (por que así evitarás malgastar tiempo en meses o años en algo que no te dará ningún beneficio en comparación), más que la ayuda de ofrecerte un código en Batch que haga lo que quieres que haga. Hay otros lenguajes soportados de forma "nativa" en Windows, vomo VisualBasic Script, javascript y PowerShell... es lo que deberías aprender si no quieres salirte del instrumental de Windows, a menos que quieras optar por un mejor camino con Ruby o Python, o lenguajes como C#, Java o VB.NET, lo que sea excepto Batch, vaya.




Cita de: yottaXT en 15 Marzo 2017, 02:24 AMAhora explicar lo que quiero, quiero que el bat revise si existen carpetas con el signo $*.* que abra esas carpetas y copie los archivos *.* a una carpeta DESTINO, luego que borre solo la carpeta que ya ha sido procesada, al final quedara la carpeta DESTINO con todos los archivos de las carpetas ORIGEN y estas a su vez quedaran eliminadas de la ruta.

Puedes usar un for directories recursive, FOR /D /R:

Código (dos) [Seleccionar]
@Echo OFF

Set "src=%CD%"
Set "dst=%HomeDrive%\Folder\"
(MKDIR "%dst%")2>NUL

For /D /R "%src%" %%# In ("$*") Do (
Echo:Moving "%%~f#"...
(
Move /-Y "%%~f#" "%dst%\%%~n#"
)1>NUL || (
Echo:Failed to move "%%~f#"...
Pause
)
)

Pause
Exit /B 0


¡Saludos!








yottaXT

Aprecio grandemente este comentario, he leído varios post en los que has comentado, casi siempre con una respuesta acertada, yo conozco Java a nivel intermedio, estaba buscando una herramienta para hacer tareas sencillas de automatización, que no me llevara mucho tiempo aprender y pudiese aplicar en cualquier momento sobre windows, con la simplicidad de un bloc de notas, por eso me interese en el batch, de los lenguajes que mencionaste anteriormente, ¿ cual consideras que logra el propósito que busco?  de manera eficiente, sencilla, que tenga una curva de aprendizaje rápida y consideres valioso de invertir tu tiempo.

Nuevamente agradezco tu conocimiento y experiencia, de ser posible adjunta algún link o manual del lenguaje para iniciarme.

PD: tengo algunas guías de VBS ¿quizá sea buena idea invertir mi tiempo en ese?

Eleкtro

Cita de: yottaXT en 17 Marzo 2017, 02:18 AMde los lenguajes que mencionaste anteriormente, ¿ cual consideras que logra el propósito que busco?  de manera eficiente, sencilla, que tenga una curva de aprendizaje rápida y consideres valioso de invertir tu tiempo.

Por nivel de complejidad en general basándome en mi criterio personal: Batch, VBS, javascript for Windows y PowerShell  -puedes desarollar scripts en todos ellos dese Windows/Notepad sin necesidad de descargarte ningún intérprete adicional.

Cita de: yottaXT en 17 Marzo 2017, 02:18 AMtengo algunas guías de VBS ¿quizá sea buena idea invertir mi tiempo en ese?

Antes que Batch, y en mi opinión personal: sí, por supuesto, tienes mucho más que ganar invirtiendo tu tiempo en aprender VBS que Batch. Con VBS puedes hacer todo lo que puedas hacer en Batch con mayor control.

¡Saludos!