Mini Foro Oficial de programacion en Batch (*.bat)

Ivanzinho

Lanero Reconocido
28 Sep 2004
1,656
Señores, muy buenas para todos, he decidido crear este foro con el fin de aprendamos a automatizar tareas, ya sea en Windows o en Linux, o donde funcione estos bats, comenzando porque pues me gustaria que alguien me regalara links asi sea en Ingles, de tutoriales para aprender Batch, con ejemplos si tienen.

bueno, la verdad es que tengo un problema en el cual ya me rindo, resulta que estoy parado en la carpeta C:\Pruebas, donde tengo tres carpetas llamadas "Ivan, Oscar, Diego", tengo un programa de compresion de archivos llamado 7-zip (www.7-zip.org), con el cual, puedo comprimir todas las carpetas en un solo archivo ZIP con el siguiente bat:


7z.exe a -tzip Archivos.zip -mx9 -r -x!*.mp3

bueno, si leen el command line en la ayuda del programa, sabran que lo que hace el bat es comprimir las carpetas "Ivan, Oscar, Diego" en el archivo "Archivos.zip" con tipo de compresion maxima (-mx9) y que agregue las subcarpetas (-r), y que me excluya la compresion de archivos mp3 (-x!mp3)

ahora bien, lo que quiero hacer es que NO me comprima todas las carpetas en un solo archivo ZIP, sino que me comprima por aparte "Ivan.zip", "Oscar.zip", "Diego.zip"

Si alguien me puede ayudar con este gallito, doy karmitas, y bueno, ojala que este foro nos sirva a todos, gracias por su colaboracion Caballeros.
 

Lmsilva

Lanero Reconocido
Lanero VIP
26 Mar 2005
923
Viejo esto le debe funcionar, pero solo corriéndolo desde una consola de WinXP (cmd):

for /D %%a in (*.) do 7z.exe a -tzip %%a %%a -mx9 -r -x!*.mp3

Si lo va a ejecutar desde un archivo batch es así, pero si lo va a ejecutar desde linea de órdenes tiene que reemplazar %% por solo un %.

Lo que hace es utilizar un switch del for (/D) para buscar solo en directorios y %%a reemplaza el nombre del directorio. Creo que solo funcionaría con WinXP por las ampliaciones que se le hicieron al "lenguaje" batch en este sistema... de pronto también en WinNT.
 
  • Me gusta
Reacciones: 4 personas

Ivanzinho

Lanero Reconocido
28 Sep 2004
1,656
|Nc| Lmsilva dijo:
Viejo esto le debe funcionar, pero solo corriéndolo desde una consola de WinXP (cmd):

for /D %%a in (*.) do 7z.exe a -tzip %%a %%a -mx9 -r -x!*.mp3

Si lo va a ejecutar desde un archivo batch es así, pero si lo va a ejecutar desde linea de órdenes tiene que reemplazar %% por solo un %.

Lo que hace es utilizar un switch del for (/D) para buscar solo en directorios y %%a reemplaza el nombre del directorio. Creo que solo funcionaría con WinXP por las ampliaciones que se le hicieron al "lenguaje" batch en este sistema... de pronto también en WinNT.


Muy vacano, gracias por tu colaboracion, ahora bien, cuando tengas un tiempito regalame y regalanos una mejor explicacion de lo que hace cada cosa, con plastilina, porfa, ahi te voy a dar Karmitas por tu ayuda, ya que es de gran apoyo para mi como para los demas.

Por ahora lo unico que puedo hacer es regalarles estos tutoriales de programacion en BAT.
 

Archivos adjuntos

  • ProBatch.zip
    52.2 KB · Visitas: 881
  • Me gusta
Reacciones: 2 personas

Lmsilva

Lanero Reconocido
Lanero VIP
26 Mar 2005
923
Listo de una, el "lenguaje" batch tiene entre sus órdenes el dichoso comando for, que funciona más o menos de la misma manera que en otros lenguajes. La sintaxis básica es:

for <variable> in <conjunto> do <orden>

Las variables en batch siempre van precedidas de % (en línea de órdenes) o %% (en batch). El conjunto es una especificación con comodines (*.* o *.doc o win??.*) y la orden es cualquier orden que se le pueda dar al sistema operativo (generalmente ejecutar un programa). Entonces esta orden lo que hace es que busca todos los directorios y por cada uno de ellos ejecuta la orden. %%a reemplaza el nombre del directorio en cada iteración... por eso si hay tres directorios: Ivan, Oscar y Diego, el lo que hace es lo siguiente:

3 directorios
por cada uno, %%a será el nombre (del conjunto Ivan, Oscar y Diego)
1ra iteración: 7z.exe a -tzip Ivan Ivan -mx9 -r -x!*.mp3
2da iteración: 7z.exe a -tzip Oscar Oscar -mx9 -r -x!*.mp3
3ra iteración: 7z.exe a -tzip Diego Diego -mx9 -r -x!*.mp3

Más o menos así es la cosa. Después les paso una página con documentación del batch language.
 

HOHO

Lanero Reconocido
26 May 2005
3,413
En windows 95/98 se podían realizar varias cosas desde archivos .bat, como el comando "choice", la mayoría de comandos eran llamadas a archivos .exe o .com (aplicaciones bajo d.o.s o de consola), pero desgraciadamente quitaron la mayoría de estos en versiones posteriores, el comando choice no lo pude usar en el xp...

Espero que me digan si existe un equivalente para el choice en el xp...
 

Ivanzinho

Lanero Reconocido
28 Sep 2004
1,656
Buena idea Kerberos, asi uno oculta el codigo fuente.

Aunque en este foro vinimos a aprender, ya que me escribes eso, les pido el favor a todos de que nos regalen link o ZIP's de tutoriales de programacion en Batch.

alguien sabe para que el for /f?? for /d?? for /r???
 

HOHO

Lanero Reconocido
26 May 2005
3,413
Pues no es por bajarle los ánimos, pero yo un dia descargué un disque "compilador" para archivos .bat, y lo que hacía era poner un encabezado siempre y el .bat quedaba con comentarios y todo al final del .exe.... no codificaba nada, solo ponía un starter y el código...
 

KERBEROS

Lanero Reconocido
30 Sep 2001
7,410
HOHO dijo:
Pues no es por bajarle los ánimos, pero yo un dia descargué un disque "compilador" para archivos .bat, y lo que hacía era poner un encabezado siempre y el .bat quedaba con comentarios y todo al final del .exe.... no codificaba nada, solo ponía un starter y el código...

Don HOHO, su merced es el "Ave de mal aguero" en todos los foros donde estoy ejeje!
Si... algunos compiladores de BAT´s hacen eso otros nop!
 

Lmsilva

Lanero Reconocido
Lanero VIP
26 Mar 2005
923
Bueno respecto de la orden for, las opciones son:
/D solo carpetas
/R recursivo
/L iteración a través de un cierto número de valores (como for i=1 to n)

No se si todos funcionan en DOS, por lo menos en el shell de WinXP y Win2K sí.

Y los compiladores, yo alguna vez utilicé uno que se llama Bat2Exec creo... convierte .BAT en .COM, no estoy seguro de si deja el batch intacto pero era bueno.
 

HOHO

Lanero Reconocido
26 May 2005
3,413
Prueben este

Encontré el "Turbo bat", no me ha funcionado, si alguien tiene w95/98 pruébelo y me cuenta...:p
 

Archivos adjuntos

  • turbobat.rar
    27.7 KB · Visitas: 349

Ivanzinho

Lanero Reconocido
28 Sep 2004
1,656
Señores, necesito crear una tarea programada con un bat que hize, pero lo que pasa es que no me muestra la ventana de DOS donde empieza a comprimir y todo, ¿alguien sabe crear una tarea donde muestre lo que se esta haciendo?
 

Ivanzinho

Lanero Reconocido
28 Sep 2004
1,656
No, ya se que es lo que pasa, el programador de tareas de Windows XP tiene una opcion que dice "ejecutar como", si yo estoy loggeado como ivan, y en esa opcion le digo que lo ejecute como "administrador" si lo ejecuta pero oculto, en cambio si le coloco ejecutar como "ivan" estando loggeado como ivan, ahi si sale la ventanita, ejeje, gracias por la respuesta. no te pude dar karmitas porque no me dejan darte mas Lmsilva
 

bitbow

Lanero Regular
6 May 2005
4
Script para generar archivo con fehca por nombre

Como opinion personal pienso que un compilador de archivos bat es algo poco practico, si quisiera generar ejecutables lo haria en c, pacal, etc, lo practico de la programacion bach es que los archivos se pueden modificar de forma sencilla y con comando practicos sin necesidad de un compilador.

El codigo se encuentra en google grupos, funciona para windows xp, no lo he probado en otro sistema windows.
Aclaro, lo probe en linux(open suse 10.0) y no funciona, si alguien teiene algo parecido para linux que me avise o lo publique en el foro.


echo off

set guion=-
set ext=.txt
for /f "tokens=1,2,3 delims=/ " %%i in ('date /t') do (
set ano=%%k
set dia=%%i
set mes=%%j)
for /f "tokens=1,2 delims=: " %%a in ('time /t') do (
set hora=%%a
set minutos=%%b)
set cadena=%dia%%guion%%mes%%guion%%ano%%guion%%hora%%guion%%minutos%%ext%

dir %1 /-p /o:gn > "C:\Listado Directorio-"%cadena%

exit
 

Ivanzinho

Lanero Reconocido
28 Sep 2004
1,656
Señores, para Windows XP
¿alguien sabe crear un bat que cree otro bat?
lo que pasa es que necesito crear un bat que me cree otro bat con el siguiente codigo:

dir /b /a:d>>Folders.txt
for /f %%b in (Folders.txt) do 7z a -tzip -r -mx9 -v98M -x@E:\Profiles\Ivan.txt E:\Backups\Compreso\%%b %%b

pero no se como hacerlo, si alguien me puede explicar, karmas, gracias por su tiempo.
 

Lmsilva

Lanero Reconocido
Lanero VIP
26 Mar 2005
923
echo dir /b /a:d>>Folders.txt > prueba.bat
echo for /f %%b in (Folders.txt) do 7z a -tzip -r -mx9 -v98M -x@E:\Profiles\Ivan.txt E:\Backups\Compreso\%%b %%b > prueba.bat
Yo creería que eso funciona.... lo que hace es echo (tal cosa) > talcosa.bat, o sea mandarlo a lo que está después del >
 

Ivanzinho

Lanero Reconocido
28 Sep 2004
1,656
|Nc| Lmsilva dijo:
echo dir /b /a:d>>Folders.txt > prueba.bat
echo for /f %%b in (Folders.txt) do 7z a -tzip -r -mx9 -v98M -x@E:\Profiles\Ivan.txt E:\Backups\Compreso\%%b %%b > prueba.bat
Yo creería que eso funciona.... lo que hace es echo (tal cosa) > talcosa.bat, o sea mandarlo a lo que está después del >
eso ya lo intenté y no funciona :( osea, solo me muestra lo siguiente en el bat creado por el bat:

for /f %b in (Folders.txt) do 7z a -tzip -r -mx9 -v98M %b %b


¿no abrá otra forma?
 

Lmsilva

Lanero Reconocido
Lanero VIP
26 Mar 2005
923
Ivanzinho dijo:
eso ya lo intenté y no funciona :( osea, solo me muestra lo siguiente en el bat creado por el bat:

for /f %b in (Folders.txt) do 7z a -tzip -r -mx9 -v98M %b %b


¿no abrá otra forma?
SIII, perdón, hay un problema.... la primera línea es con > pero la siguiente debe ser con >>, es decir echo ........... >> prueba.bat. Pruebe así a ver q pasa... el problema es que > crea de nuevo el archivo.
 

Los últimos mensajes

Los últimos temas