PDA

Ver la versión completa : Programacion Batch



surfman
19-09-2007, 06:35
Bueno, creo que aqui lo pondre, a ver que les parece, bienvenidas las criticas, salu2.

surfman
19-09-2007, 06:36
Hola, bueno aqui esta el pequenio tutorial o manual para programacion batch que prometi poner.

Antes que nada empezare escribiendo algunos comandos de DOS, para los que no los conocen, despues pondre como se programa en batch y por ultimo algunos archivos de registro en los que se encuentra informacion importante del sistema.

A ver si me entienden porque acabo de aprender a programar en batch y no se mucho, pero supongo que alguien mas me ayudara corrigiendo mis errores (en pocas palabras soy newbie jejje).




COMANDOS DOS


Assoc
Muestra o modifica las asociaciones de extensión de nombre de archivo. Si no se utilizan parámetros, el comando assoc muestra una lista de todas las asociaciones de extensión de nombre de archivo actuales.


Sintaxis
assoc [.ext[=[tipoDeArchivo]]]

un ejemplo seria:
C:\> Assoc .mp3=WinZip

esto lo que haria es que todos los archivos mp3 los abriria con el WinZip, bueno trataria jejje.

AT
El comando at sirve para programar tareas, tambien sirve para ver las tareas programadas existentes.

Sintaxis

at \\nombreDeEquipo hora /interactive | /every:fecha,... /next:fecha,... comando

at \\nombreDeEquipo Id /delete | /delete/yes

Bueno esto se ve muy complicado pero no lo es, nombredequipo es la coputadora en la que quieres que se ejecute, si quieres que se ejecute en tu ordenador no pongas \\nombredeequipo, hora es la hora (00:00) a la que quieres que se ejecute, /interactive es tan solo para que veamos cuando se esta ejecutando el proceso, y despues every significa cada en espaniol, y next significa siguiente, asi que nada mas le agregan la fecha, y por utlimo el comando a ejecutar, ejemplo:

C:\> at 23:00 /interactive /every:monday telnet host o ip

C:\> at \\Sergio 05:00 /every:03 cmd /c copy C:\Documentos\*.* C:\MisDocumentos

Si quieren que el comando se ejecute cada dia: every:"dd"

Si escriben at sin nada mas en la linea de comandos, les aparecera la lista de tareas y su estado, en esta tabla viene una columna que dice ID, la cual le da un numero a cada tarea/proceso, asi que para eliminar una tarea tendrian que escribir lo sig.:

C:\> at "ID" /del

del es el comando para borrar archivos, supongo que ya lo sabian, pero por si la moscas se los dije je.

Attrib
Muestra, establece o quita los atributos de sólo lectura, modificado, sistema y oculto asignados a los archivos o a los directorios. Utilizado sin parámetros, attrib muestra los atributos de todos los archivos del directorio actual.


Sintaxis
attrib [{+r | -r}] [{+a | -a}] [{+s | -s}] [{+h | -h}] [[unidad:][rutaDeAcceso] nombreDeArchivo] [/s[/d]]

Bueno para ver los parametros escriban el comando mas /? son demasiados para cada comando y no pienso ponerlos aqui, por ejemplo: C:/> attrib /?

ejemplo: C:/> attrib +s +h -r C:\Mis Documentos\archivo.extension

Convierte al archivo.extension como archivo del sistema, lo oculta y le quita el atributo de lectura.

Chdir
Nos muestra el directorio en el que estamos, y nos sirve tambien para cambiar de directorio, ejemplos:

Sintaxis
chdir [[/d] [unidad:][rutaDeAcceso] [..]] [[/d] [unidad:][rutaDeAcceso] [..]]
cd [[/d] [unidad:][rutaDeAcceso] [..]] [[/d] [unidad:][rutaDeAcceso] [..]]

C:/> chdir C:\Mis Documentos\Juan
C:/> chdir C:\Mis Documentos\Ivan


Cmd
Inicia una nueva instancia del intérprete de comandos, Cmd.exe. Si se utiliza sin parámetros, cmd muestra información de versión y copyright del sistema operativo.

Con este comando puedes iniciar una ventana de ms-DOS

Copy
Copia uno o más archivos de una a otra ubicación.

Sintaxis
copy [/d] [/v] [/n] [{/y | /-y}] [/z] [{/a | /b}] Origen [{/a | /b}] [+Origen [{/a | /b}] [+ ...]] ]

ejemplo:

C:/> copy juliaroberts.jpg pamelaandersson.jpg \a

Del (erase)
Elimina los archivos especificados.


Sintaxis
del [unidad:][rutaDeAcceso] nombreDeArchivo [...] [/p] [/f] [/s] [/q] [/a[:atributos]]
erase [unidad:][rutaDeAcceso] nombreDeArchivo [...] [/p] [/f] [/s] [/q] [/a[:atributos]]

Ejemplo
C:/> del C:\Mis Documentos tarea.doc

Nota:Existe un comodin que es el *, este significa todos, bueno mas o menos, y se puede utilizar de la sig forma:

C:/> del foto*.*
borra todos los archivos que empiecen por foto y algo mas, con cualquier extension.

C:/> del foto1.*
borra todos los archivos con el nombre foto y cuaquier extension.

C:/> del *.jpg
borra todos los archivos con extension .jpg

C:/> del *.*
borra todos los archivos con cualquier nombre, cualquier extension en ese directorio.

Bueno despues de esta aclaracion prosigamos.

Dir
Muestra una lista de los archivos y subdirectorios de un directorio. Si se utiliza sin parámetros, el comando dir muestra la etiqueta de volumen y el número de serie del disco, seguidos de una lista de directorios y archivos del disco, que incluye sus nombres y la fecha y la hora en que fueron modificados por última vez. Para archivos, dirmuestra la extensión y el tamaño en bytes. Dir también muestra el número total de archivos y directorios enumerados, su tamaño acumulado y el espacio libre (en bytes) del disco.


Sintaxis
dir [unidad:][rutaDeAcceso] [...] [/p] [/q] [/w] [/a[[:]atributos]][/o[[:]orden]] [/t[[:]campoDeHora]] [/s] [/b] [/l] [/x] [/c] [/4]

ejemplo:
C:/> dir
muestra una lista de archivos del directorio actual.

Con este comando tambien se pueden utilizar los comodines, ejemplo:
C:/> dir *.jpg

Echo
Activa o desactiva la característica de presentación de comandos en la pantalla o muestra un mensaje. Si se utiliza sin parámetros, echo muestra la configuración actual de presentación.


Sintaxis
echo [{on | off}] [mensaje]
Parámetros
{ on| off}

Bueno este comando lo veremos mas adelante para programar, lo unico que hace es, si escribes echo on comando, se vera en pantalla el comando, o si escribes echo off comando no se vera en pantalla.

Exit
Sirve para salir de la linea de comandos o paa regresar a la terminal anterior, por ejemplo cuando hacemos un ftp, si escribimos exit, saldra de la ejecucion de ftp.

Findstr
Busca patrones de texto en archivos utilizando expresiones regulares.

Por ejemplo
C:/> findstr "hola como estas" carta.txt

surfman
19-09-2007, 06:48
bueno la verdad es que he tenido mucho trabajo (mas dinero jejje), pero por lo menos hice un pequenio pedacito por el momento, voy a seguir y si sigue despierto lo posteo, si no maniana.

Para estos comandos me base en la guia de referencia de comandos de m#@$soft, aqui esta el link para que vean todos, y al rato les pongo otra parte del mini tuto.

http://www.microsoft.com/technet/prodtechnol/windowsserver2003/es/library/ServerHelp/4b0b8777-8f1b-4f86-a8e9-4b38f1b00064.mspx?mfr=true

tengan encuenta que no todos los comandos sirven en todas las versiones dde guindows, asi que chequenle, salu2.

surfman
19-09-2007, 09:11
Aqui esta otro pedazito jejej, bueno, despues de esto seguire con la programacion, ya si me encuentro otros comandos que crea que son utiles los ire poniendo por aqui.



Ftype
Muestra o modifica los tipos de archivos empleados en asociaciones de extensiones de archivo. Cuando se usa sin parámetros, ftype muestra los tipos de archivo que tienen definidas cadenas del comando open.


Sintaxis
Ftype ]]

Bueno este comando no se bien como se utiliza, solo se que sirve para asociar a cada programa una ruta de acceso, o sea que con este comando podemos cambiar con que programa se abrira un archivo, es similar al comando assoc, pero no es lo mismo, si alguien me podria ayudar a explicar este comando se las agradeceria, si no ya saben, ahi esta google para que lo encuentren mejor, pero lo que deben saber es que este comando es muy importante, con el podriamos descofigurar el sisema. Cuando entienda bien este comando cambiare este texto.

Mkdir
Crea un directorio o un subdirectorio.


Sintaxis
mkdir [unidad:]rutaDeAcceso

ejemplo
C:/> mkdir \albums\fotos\verano
C:/> mkdir \ya\comprendieron\verdad


Path
Establece la ruta de acceso de comandos en la variable de entorno PATH, que es el conjunto de directorios utilizados para buscar archivos ejecutables. Si utiliza path sin parámetros, se mostrará la ruta de acceso de comandos actual.


Sintaxis
Path [[%path%] [unidad:]rutaDeAcceso [;...]]

Este comando nos sirve para poder acceder a los archivos ejecutables desde cualquier directorio, especificando su ruta para que el sistema sepa donde encontrarlos, y asi al escribir solo el nombre del archivo este se ejecutara, el unico inconveniente es que al reiniciar el sistema tendras que especificarlos de nuevo, creo que hay una forma de lograr que no se borren estos paths, pero no se como aun, creo que se tiene que modificar un archivo que se inicie con windows, no se si alguien pueda ayudar con esto tambien.

ejemplos
C:/> path=c:\Mis Documentos
si dentro de la carpeta Mis Documentos tenemos un archivo.bat(que es la extension para los programitas que vamos a hacer), este se ejecutara cuando escribas archivo.bat en la linea de comandos, sin importar en que directorio te encuentres, si quieres crear mas de un path utilizas el ;, veamos:

C:/> path=c:\fotos;c:\misbat;c:\mis documentos


Pause
Suspende la ejecución de un programa por lotes y muestra un mensaje que pide al usuario que presione cualquier tecla para continuar.


Sintaxis
pause

Bueno este lo veremos mas adelante en la programacion batch, pero pueden teclear pause en la linea de comandos, y veran el resultado.


Rmdir (rd)
Quita (elimina) un directorio.


Sintaxis
rmdir [unidad:]rutaDeAcceso [/s] [/q]
rd [unidad:]rutaDeAcceso [/s] [/q]

Este es facil, lo unico malo es que el directorio se tiene que encontrar vacio para que lo pueda borrar.Ejemplo:

C:/> rd c:\imagenes


Rename (ren)
Cambia el nombre de uno o varios archivos.


Sintaxis
rename [unidad:][rutaDeAcceso] nombreDeArchivo1 nombreDeArchivo2
ren [unidad:][rutaDeAcceso] nombreDeArchivo1 nombreDeArchivo2

Aqui se pueden utilizar los comodines, ejemplos;

C:/> rename adios.txt adios.doc
renombra el archivo adios.txt a adios.doc

C:/> ren *.jpg *.bmp
cambia todos los archivos con extencion .jpg a archivos con extension.bmp con su nombre respectivo.

Tambien puedes cambiar el nombre de un directorio, ejem.:
C:/> ren imagenes hermosas

En este comando tambien sirven los comodines, pero bueno, todo donde utilicen nombres de archivos sirven, eso creo.


Start
Inicia una ventana independiente del símbolo del sistema para ejecutar un programa o un comando especificado. Si se utiliza sin parámetros, start abre una segunda ventana del símbolo del sistema.


Sintaxis
start ["título"] [/drutaDeAcceso] [/i] [/min] [/max] [{/separate | /shared}] [{/low | /normal | /high | /realtime | /abovenormal | belownormal}] [/wait] [/b] [nombreDeArchivo] [parámetros]

Bueno, este comando es muy util, no le hagan caso a todos los parametros, es bueno saber para que sirven, pero lo pueden utilizar sin ellos, sirve para ejecutar un programa en otra terminal, supongamos que estas ocupando una terminal y quieres bajar algun programa de internet por medio de ftp con un programita batch previamente heco, bueno, pues simplemente escribes:

C:/> start ftp.bat
Donde ftp.bat es el programita previamente hecho por ti para descargar algo de internet o continuar descargandolo sin necesidad de darle mas instrucciones, asi, el ftp,bat se ejecutara en otra ventana, y tu podras seguir utilizando la terminal en la que te encuentras sin necesidad de esperar a que el archivo termine de bajarse.



Subst
Asocia una ruta de acceso con una letra de unidad de disco. Si se utiliza sin parámetros, subst presenta los nombres de las unidades virtuales activas.


Sintaxis
subst [unidad1: [unidad2:]rutaDeAcceso]
subst unidad1:/d

Creo que este es mas claro, ejemplo:

C:/>subst x: c:\Mis Documentos\juegos

Con esto tendras una nueva unidad virtual llamada x: la cual en realidad sera una ruta de acceso a la carpeta c:\Mis Documentos\juegos



Time
Muestra o especifica la hora del sistema. Si se utiliza sin parámetros, time muestra la hora del sistema y le pide que introduzca una nueva hora.


Sintaxis
time [/time] [horas:[minutos[:segundos[.centésimas]]][{A | P}]]

Parámetros
/t
Muestra la hora actual del sistema, sin pedirle que introduzca una nueva hora.

ejemplo:

C:/> time 9:00P
Establece una nueva hora (9:00 pm)



Tree
Presenta en pantalla la estructura de directorios de una ruta de acceso o del disco de una unidad.


Sintaxis
tree [unidad:][rutaDeAcceso] [/f] [/a]

/f
Muestra los nombres de los archivos de cada directorio.
/a
Indica al comando tree que utilice caracteres de texto en lugar de caracteres gráficos para mostrar las líneas que vinculan a los subdirectorios.

ejemplo:

C:/> tree d:\ /f

Nos mostratara una lista de los subdirectorios de la unidad d:\ (suponiendo que tenemos unidad d:\), si el directorio es muy largo agreguen: | more, de esa forma lo veran por paginas.



Type
Presenta el contenido de un archivo de texto. Utilice el comando type para examinar un archivo de texto sin modificarlo.


Sintaxis
type [Unidad:][rutaDeAcceso] nombreDeArchivo

ejemplo

C:/> type ecosistema.txt

C:/> type dunas.txt | more

Espero que vaya quedando claro todo y que les sirva de algo, salu2.

surfman
19-09-2007, 11:09
PROGRAMACION BATCH


Antes de empezar tengo que decirles que utilizaremos unos nuevos comandos, los cuales iremos viendo poco a poco.

Para hacer los programitas batch utilizaremos un editor de textos, el mas sencillo, en uindous esta l notepad, despues de terminar de escribir las instrucciones lo tendran que guradar con extension .bat y en donde dice tipo de archivo seleccioan todos los archivos o all files, y lo guardan en un directorio que tenga path( ver el comando path), para que lo ejecutemos desde cualquier directorio en la linea de comandos.

Algo que tengo que agregar es que el @ al inicio de la primera linea del archivo.bat sirve para que el programita se ejecute sin que se vea.


ECHO
Ya lo vimos, echo off, no se ven los mensajes, echo on se ven.


REM
Sirve para dejar notas en el programa y no perdernos, esto sirve para cuando nuestro programa es muy largo, asi, con estas notas que las podemos poner en cualquier parte del programa nos serviran para saber que estamos haciendo en cada pedazo de codigo, estas notas no se veran al ejecutarse el programa, solo sirven de referencia.

ejemplo:

@echo off
rem programita de prueba
rem aqui escribo hola
echo hola
rem me cambio de directorio
cd Mis Documentos
rem borro diana
del diana.jpg
rem escribo adios
echo adios
rem termina el programa
exit

Las lineas que tienen rem no se veran son las de echo. Espero que no haya dudas.


Variables: Las variables (si no saben lo que es busquenlo en wikipedia) son %1 %2 %3, etc... creo que hay hasta el nueve nada mas, y la variable %0 es el programita que estamos corriendo, ejemplo:

Si tenemos un programa .bat que necesita de 2 variables para su correcta ejecucion, lo que haremos sera pasarle las variables de la sig. forma:

C:/> nombre_programa Guillermo Costecho

Si el programa fuese el sig.

@echo off
rem programita para saludar a las personas
echo Hola %1 %2
exit

Lo que haria seria tomar Guillermo como %1 y Costecho como %2, claro que este programa no sirve de nada es solo para aprender, y ni siquiera interactua con el usuario preguntandole su nombre, bueno, espero que se haya entendido.

Si queremos hacer un programita que copie un archivo a una carpeta nueva:

@echo off
rem programita que copia un archivo en una carpeta nueva
cd %1
copy %2 %3
rem borro el archivo de ese directorio
del %2
rem hago un dir para verificar
cd %3
dir
pause
exit

Si el programita se llamase copia, lo correriamos asi:

C:/> copia directorio_del_archivo archivo.extension ruta_nueva

C:/> copia "c:\mis documentos" tarea.txt "c:\mis tareas"

Noten las comillas, las uso ya que existen espacios en blanco en la ruta del directorio asi las variables tomaran toda la ruta y no nada mas c:\mis, de otra forma no funcionaria bien el programita y daria "error, no se encontro el archivo, ni un archivo copiado", lo que hace es ir al directorio "c:\mis documentos" copia el archivo tarea.txt, si este existe lo copia en "c:\mis tareas" despues borra tarea.txt del directorio actual, se cambia de diractorio a donde copio el archivo y ejecuta el comando dir, despues de eso viene un pause(ver seccion comando pause mas arriba) para que el programa se detenga y se pueda ver en pantalla el dir, despues de dar enter termina el programita.
Creo que esta muy facil esto no?, espero que si para que no se enreden como yo que me maree despues de esta explicacion =S jeje.



Bueno ya me esta dando suenio, pero voy a tratar de seguir para terminar lo antes posible y poder pasar a otras cosas :0, ahorita regreso voy por el te, jejje, salu2.

surfman
19-09-2007, 13:12
Bueno aqui les dejo la continuacion...


Variables del Ssitema: Estas variables estan predefinidas por el sistema, son muy utiles, ya que con ellas podemos obtener informacion del sistema, su sintaxis es %variable%, ejemplo:

%OS%

Esta variable nos dice el sistema operativo de la computadora, muy util para saber sobre que sistema estamos y asi proceder a dar instrucciones para que nuestro bat funcione correctamente, ya que como les habia dicho (n no les habia dicho?, creo que no) todas las versiones de indows tienen distintas rutas para sus archivos .ini, cosa que veremos despues de esta seccion de programacion batch, por ejemplo el autexec.net que es el ejecutable de la terminal de DOS, en win9x se llama autoexec.bat y se encuentra en un directorio distinto que en win xp/nt/98/2003 , etc.., asi que para que su programa funcione correctamente tenemos que tener en cuenta todas estas variantes, aunque en esto nos pueden ayudar estas variables, por eso y mas son muy importantes.


%path%

Nos dice todos los directorios que tienen path (ver comando path mas arriba).



%processor_architecture%

Nos da la architectura de nuestro procesador.


%random%

Nos da un numero decimal aleatorio entre o y 32767.



%systemroot%

Este es el directorio que tiene como root el sistema, por lo general es c:\windows


%temp% o %tmp%

Con esta variable del sistema podemos tendremos acceso al directorio de archivos temporales.


%windir%

Este se utiliza para saber el directorio de windows, o bueno en lugar de escribir el directorio raiz de windows, como no sabemos si le han cambiado el nombre a la unidad, con esta variable la detectamos, en ves de poner la unidad raiz ponemos esta variable.


Tambien podemos agregar variables, estas se llamaran de entorno, y su sintaxis es la misma que las de sistema, pero para declararlas utilizaremos el comando set.

Set
Muestra, establece o quita variables de entorno. Utilice el comando set sin parámetros para mostrar la configuración de entorno actual.


Sintaxis
set [[/a [expresión]] [/p [variable=]] cadena]

ejemplos:

set ruta1="c:\mis documentos"

Aqui lo que hacemos es agregar la ruta c:\mis documentos a la variable ruta1, por lo que si en nuestro bat o en la terminal escribimos:

cd %ruta1%

nos posisionaremos en c:\mis documentos.

set saludo="hola como estas?"

Aqui lo que hacemos es agregarle una cadena de caracteres a la variable saludo, por lo que si escribimos:

echo %saludo%

Nos aparecera en pantalla hola como estas?

Tambien podemos llamar comandos con variables, ejemplo:

set rid=dir
set dc=cd
set copiar=copy
set led=del

Con esto si el programita tuviese:

@echo off
%dc% %windir%
%rid%
%led% *.txt
%copiar% *.jpg %windir%\fotos
exit

Lo que haria seria posicionarnos en el directorio de windows, borrar todos los archivos con extension .txt, hacer un dir, y copiar todos los archivos.jpg a una nueva subcarpeta llamada fotos, eso es todo, nada malo. Esto sirve para que los antivirus no detecten como malicioso el programa porque no van a encontrar ni comando borrando o copiando cosas, y lo pasaran por alto.

Antes de continuar, quiero decirles para que sirve el signo > y el >>, esto lo que hace es redireccionar la salida hacia un archivo o dispositivo, ejemplo:

@echo off
cd %windir&
dir >lista.txt
dir >>lista.txt
exit

Aqui lo que hace el bat es entrar al directorio de windows, hacer un dir y mandarlo a un archivo con el nombre lista.txt, y como no existia lo creo, pero de haber existido habria sobre escrito el contenido de dicho archivo dejando solo la lista del directorio, y despues con el >> lo que hacemos es meter el contenido del dir otra vez, pero sin sobreescribir, agregandolo, por lo que > se utiliza para darle salida a un archivo o sobreescribirlo si es que contiene algo, y >> para agregarle a ese archivo.



Goto
En un programa de proceso por lotes, dirige el procesamiento de los comandos a una línea identificada por una etiqueta. Al encontrar la etiqueta, procesa los comandos a partir de la siguiente línea.


Sintaxis
gotoetiqueta

Este comando sirve para saltarse de una linea a otra, ejemplo:

@echo off
rem programita que copia un archivo en una carpeta nueva
goto abajo
cd %1
copy %2 %3
rem borro el archivo de ese directorio
:arriba
goto fin
del %2
rem hago un dir para verificar
:abajo
goto arriba
cd %3
dir
:fin
pause
exit

Como ven en este programita cambiado, no hara nada, ya que primero ira a la etiqueta :abajo, de ahi a la etiqueta :arriba, y de ahi a la etiqueta :fin, donde se saldra del programa, como ven para indicar que debe saltar a una etiqueta se debe poner "goto etiqueta" y la ":etiqueta" la la debemos poner donde queramos que continue el programa, esto es util para las condiciones con el comando if, que veremos mas adelante.


Hasta aqui llegue por ahora, porque viene el comando if y tengo que pensar como lo voy a explicar, salu2.

hystd
19-09-2007, 16:36
Buen trabajo y gracias por el aporte ;)

Saludos

surfman
20-09-2007, 08:54
Gracias hystd,
es un honor poder postear mi primer tuto por aqui, bueno pues aqui esta otro pedacito, al rato posteo lo demas.
salu2.

surfman
20-09-2007, 08:56
Aqui esta la continuacion...



Bueno antes que nada para ver el comando if tratare de explicarselos, en espaniol if = si, asi que es lo mismo que una oracion en espaniol, si se cumple esta condicion, entonces hare esto, si la condocion no se cumple, hare lo siguiente, un ejemplo seri "si en la fiesta hay chicas me quedo jejej, si no hay me regreso a a casa" o "si en la fiesta hay chicas no tomo, si no hay me pongo hasta las chanclas jeje"
Ahora les voy a poner un pequenio diagrama todo chueco pero creo que lo entenderan:


***************************|********************** ************
***************************|********************** ************
**************************/#\*********************************
*************************/###\********************************
************************/##si##\******************************
***********************/#######\****************************
**********************/#condicion##\**************************
*******---verdadera--------\#########/****************************
*******|***************\#######/*****************************
*******|****************\#####/******************************
*******|*****************\###/********************************
_______________***********\#/********************************
|##########|*************|************************ **********
|##Accion####|*************|********************** ************
|##########|***********Falsa********************** **********
===========*************|************************* *********
*******************__________________************* ***********
*******************|############|***************** *******
*******************|###Accion#####|*************** *********
*******************|############|***************** *******
*******************=============****************** ******
************************************************** ***********



Esto es el if, si la condicion es verdadera, se procede a hacer tal accion, si la condicion es falsa, se procede a hacer otra accion, esto es para que nuestro programita tome decisiones, por ejemplo, si el sistema operativo es win9x hacer lo siguiente, si es win xp hacer esta otra accion, si es win 95, hacer esto otro, es simple.


If
Ejecuta un proceso condicional en programas por lotes.


Sintaxis
if errorlevel número comando [else expresión]
if [not] cadena1==cadena2 comando [else expresión]
if [not] exist nombreDeArchivo comando [else expresión]

ejemplos:

Empezaremos comparando dos cadenas de caracteres:

if cadena_caracteres==cadena_caracteres comando

if %cadena%==juanito echo hola juanito

if %5==cacahuates echo asi que te gustan los cacahuates

Aqui lo que hacemos es comparar el contenido de una variable con una cadena de caracteres, si es verdadero escribira en pantalla algo. Lo mismo podemos hacer con el parametro not, veamos:

if not %cadena%==pepe echo tu no eres pepe, adios.

Aqui lo unico que cambia es que esta comprobando que no sean iguales. Ahora veamos como se utiliza con archivos. Para esto utilizaremos el parametro exist, que en espaniol significa existe, ejemplo:

if exist pablito.mp3 del juanito.mp3

Ahora con not:

if not exist tarea.txt echo a que hora vas a hacer tu tarea?

Ahora viene una mas completa, que es como el diagrama de arriba:

if exist tarea.txt (
del tarea.txt
echo ups lo siento
) else (
echo a que hora vas a hacer tu tarea?
)

con esta forma podemos anidar condiciones if y poner varias acciones no solo una, ademas se entiende mejor una vez que te acostumbras, cuando digo anidar me refiero a poner un if dentro de otro if y otro dentro de este y asi sucesivamente, con lo que podemos tomar mejores deciones, bueno nuestro programita tomara mejores decisiones y no tendra tantos errores. Esto solo sirve con el if exist achivo,, ya trate de utilizarlo con el if nada mas y no me resulto, pero aqui viene otro comando que nos ayudara.
Este va relaciondao con el if, asi que lo pondre antes de terminar la ultima forma del if, que es el error level, esto de error level es una caracteristica del if, que en realidad solo es un numero que te da el programa despues de usar el choice, ahorita lo veremos.

Choice
Solicita al usuario que realice una elección en un programa por lotes mostrando un mensaje y deteniéndose momentáneamente para que el usuario elija entre un conjunto de claves de opción del usuario.


Sintaxis
choice [/c [opciones]] [/cs] [/ttiempoDeEspera/dopción] [/mtexto]

Este comando es muy facil, se utiliza para elefir una opcion, el parametro /c se utiliza para definir las opciones, /n para que las opciones no aparescan en pantalla, /cs convierte las opciones en key sensitive(distingue entre mayusculas y minusculas, /t el tiempo (en segundos) que el programa debe esperar a que el usuario eliga, de lo contrario se tomara una opcion por default(predeterminada), y nada mas falta agregarle el texto, ejemplo:

choice Elige una de estas opciones ahfd /c:ahfd /t 5 /n

Aqui si se elige a el valor que devolvera sera 1, h = 2, f = 3 y d = 4.
Lo que se vera en pantalla sera "Elige una de estas opciones ahfd"

Bueno ahora pasemos a ver como se utiliza con el if, el valor que regrese el choice es el que tomara el if, de la sig. manera:

choice Elige una de estas opciones ahfd /c:ahfd /t 5 /n
if errorlevel 4 comando
if errorlevel 3 comando
if errorlevel 2 comando
if errorlevel 1 comando
if errorlevel 0 comando

Entonces como pueden ver hay algunas pequenias reglas, como el if, lo tenemos que poner empezando con el errorlevel mayor e ir en forma descendente, de otra forma no funcionara el programa, creanme, ya me estuve rompiendo la cabeza antes con eso. A y el error level 0 sirve par si seleccionan una opcion que no esta en las opciones.
Otra cosa importante a mencionar es que este if funciona con el goto, veamos un ejemplo mas elaborado utilizando bastantes cosas, pero sin una verdadera utilidad :(.

@echo off
:menu
cls
echo ###################################
echo # Que es lo que quieres hacer? #
echo ###################################
echo # 1 # Hacer un respaldo de c:\Mis Documentos #
echo # 2 # Checar si hiciste la tarea #
echo # 3 # Escribir una carta a tu novia #
echo # 4 # Hacer una operacion matematica sencilla #
echo # 5 # Salir del programa #
echo ##################################
@choice Elige 1,2,3,4 o 5 /c:12345 /n
if errorlevel 5 goto salir
if errorlevel 4 goto oper
if errorlevel 3 goto escribir
if errorlevel 2 goto checar
if errorlevel 1 goto respaldo
ir errorlevel 0 goto menu
:respaldo
copy "c:\mis documentos\*.*" "a:\mis documentos"
cd a:\mis documentos
dir
pause
goto menu
:checar
if exist c:\tarea.txt echo si la hiciste
if not exist c:\tarea.txt echo a que hora la piensas hacer?
pause >null
goto menu
:escribir
echo Aqui esta el notepad para que le escribas,
echo recuerda guardar la carta y hacer un
echo respaldo
pause
goto menu
:oper
echo Toma... aqui tienes la calculadora,
echo creias que iba a hacer todo por ti?
echo jejje :P
pause
calc
goto menu
:salir
echo Ciao.
pause >null
exit

Nost
20-09-2007, 09:14
Se nota que no usas NT :(
El comando choice (para nuestra desgracia) ya no existe, en su lugar se debería usar set:

set /p variable=Escribe el valor de variable...

Luego se haría un if para recoger el resultado.

Yo también hice una guía de batching, quizás la cuelgue algún día...

Y por cierto, usa las etiquetas [code]. Todo se verá mejor.

surfman
20-09-2007, 10:32
**************:)**********:P************8)******** *******

Hola Nost,
que bueno que me dices esto, yo ni por enterado, investigue y si la verdad tienes razon, pero ya vi como se hace con set, es de la sig manera:



set variable=
set /p variable=Texto que le daras al usuario para escoger.
if %variable%==1 comando
if %variable%==2 comando
if %variable%==3 comando
echo %variable% No es correcta, por favor intente de nuevo.

asi que podria quedar asi si no me equivoco:

@echo off
:menu
echo 1 Saludo
echo 2 Carta
echo 3 Salir
set var=
set /p var=Eliga una opcion.
if %var%==1 goto saludo
if %var%==2 goto carta
if %var%==3 goto salir
echo la opcion que me diste no es correcta,
echo intentalo de nuevo.
goto menu
:saludo
echo Hola buenos dias.
pause
goto menu
:carta
echo Aqui esta el notepad
pause
notepad
goto menu
:salir
Hasta la vista
pause
exit



No se si esto este bien, lo acabo de ver y lo puse como entendi.

Oye Nost, pues estaria bien que postearas tu tutorial, para tener uno mejor hecho, este minituto lo estoy haciendo para aportar algo, pero mas que nada para aprenderme bien este tipo de programacion, al estar haciendolo se me han quitado muchas dudas.

Acerca de que no uso NT, no la verdad es que tengo el win xp en virtual box, ahi estoy probando todo.
A y otra solucion que le veo, que no es muy buena talvez, porque es mas facil utilizar set que choice, pero lo que se podria hacer es bajar el choice de una pagina de internet, pero la verdad seria mas lio, bueno, gracias por la ayuda Nost ;).
salu2:0=

Nost
21-09-2007, 14:52
El problema del set es que no puedes obligar al usuario ni a escribir algo antes de pulsar enter, ni a que escriba cierta longitud... Está muy mal hecho, pero es la única herramienta que tenemos.

Mi curso de batching en realidad está basado en cosas características del batching, sólo se para un momentito a explicar comandos.

Me refiero al if, al else, al for, a goto, al símbolo |, al >, >>, <, etc.

surfman
21-09-2007, 22:48
Si, tienes razon, no se puede interactuar con el usuario, pero tal vez para eso podriamos utilizar las variables %1 %2 %3 etc..., llamando a un programa dentro del programa, con el comando call, y cambiando las variables %1 %2 etc... con el comando shift, no lo he probado puesto que soy nuevo en esto de la programacion y batch, pero supongo que si funciona, lo unico que no se es si las variables que obtengas por medio del ususario al llamar a otro programa las puedes utilizar como globales, pero bueno, en el transcurso de este minituto lo intentare, en la sig. seccion pondre los comandos for call shift y a ver cual me falta, salu2 Nost.

Cypress
22-09-2007, 04:59
GOTO noooooo !! eso hizo a la programación irse al diablo !!

No me gusta batch para nada.. pero reconozco que tiene sus utilidades :)

por cierto, cuándo lanzan uno para shell unix ?

Nunca supe como hacer un script al que le pueda acceder un pass :'( no sé, ej:


#!/bin/bash
# xD ^
# Mi Script para instalar un programa y no tener que usar apt - yupii -

echo escriba el nombre del paquete:
read paquete
sudo apt-get install $paquete

# fin
# ahí mi problema, cómo hago para ingresar el pass del usuario, - suponiendo que lo se




alguna idea ?

hystd
22-09-2007, 07:02
GOTO noooooo !! eso hizo a la programación irse al diablo !!

¿?
GOTO es predecesor de los lenguajes actuales, además el lenguaje máquina es del tipo GOTO (computable), cualquier programa escrito en un lenguaje X, será traducido a lenguaje máquina por el compilador e interpretado por el programa universal (sistema operativo)...

Lo que ocurre es que los lenguajes de alto nivel fueron desarrollados porque se acercan más a la forma de pensar de las personas, y no al de la máquina. No obstante cualquier computador o sistema digital programable (con memoria para almacenar programas y/o datos), lo que entiende es de instrucciones del tipo GOTO, que son básicamente codificadas con 1's y 0's para posteriormente ser interpretadas por una unidad de control de dicho sistema.

En ningún momento la programación se ha ido al diablo con GOTO, justo lo contrario, ha permitido evolucionar para mejorar la facilidad de uso.

Para más información sobre el tema... consultar "teoria de la computabilidad"

Saludos

j8k6f4v9j
22-09-2007, 07:37
Cypress, cuando un script necesita privilegios de root simpemente lo ejecutas como root, y para cada acciónque debes ser tomada como por parte del usuario puedes usar 'su' dentro del script.

Pero esto es otra temática, puedes abrir dudas sobre shell scripting en un nuevo hilo o en el subforo de linux.

Salu2



http://img359.imageshack.us/img359/6631/celliigy4.pngKeep on Rollin' :mad:

Cypress
22-09-2007, 08:59
GOTO es predecesor de los lenguajes actuales,

Mmmm.. Según tenia entendido - tal vez este mal - GOTO hace la programación ilegible. Por eso se dejó de usar, GOTO haría inecesario estructuras como while o for,


A diferencia de la llamada a una función, no se requiere ningún tipo de preparación o estructura de código para utilizar un GOTO. Como resultado, es más sencillo obtener código inconsistente, incompleto o complicado de mantener. Justamente por ello en los años 60 y 70, cuando surgió la programación estructurada, la comunidad informática se expresó a favor de otras sentencias de control (if ó bucles for y do/while) en lugar del GOTO.

Tal creencia está tan arraigada que el GOTO es muy criticado por los dedicados a la enseñanza de la programación, que lo suelen desaconsejar



10 PRINT " para qué usar estructuras como while o for si tenemos GOTO "
20 a=a+1
30 IF a = 10 THEN GOTO 50
40 GOTO 10
50 END.



eso sería una suerte de basic.

ese código es una porqueria :0=

Un FOR es mucho más lindo de ver, y leer. :)


Saludos,
Cypress

p.s voy a abrir otro post sobre prog, shell, pero mañana ahora me voy a dormirm son casi las 4:00 !!

surfman
22-09-2007, 12:53
:) Hola a todos, gracias por interesarse en este post, pues cuando termine de hacer este minituto empezare con el de bash que les parece?, eso me anima, porque no se programar en bash, solo en batch(apenas) y en delphi aprendi lo basico pero nunca ermine de verlo, asi que supongo que si hago un minituto de bash lo aprendere mas rapido, eso si, va a ser mas dificil, porque ya le di una leida a un tutorial de bash y tienes muchas mas opciones, pero eso es lo mejor supongo, tener menos limitaciones, asi que deseenme suerte en esta aventura jeje,:cool: , bueno pues aun no termino este por el trabajo, no he dormido, de hecho vengo del trabajo, manana trabajo de nuevo, pero de ahi al jueves o viernes libre a huevo jaja:p , bueno entonces tendre que posponer el minituto de html y de javascript, pero esos son mas faciles de aprender y ya hay demasiados buenos tutos sobre eso asi que no creo que haga falta por aqui, salu2 a tos.

:0=

j8k6f4v9j
22-09-2007, 13:43
cuando termine de hacer este minituto empezare con el de bash que les parece?

No hay comparación. Indudablemente aprenderás muchísimo si te decides a hacer un manual de bash competente. Tendrás que estudiar mucho y deberás ir abandonando la idea de hacerlo con una hoja de ruta ni remotamente parecida a la que usaste con "batch": emplearás muchísimo más tiempo.

Llevo algunos años de uso de GNU/linux, y ni de lejos domino el shell scripting (no se me da mal, pero es muy potente y creo que nunca se termina de aprender con él o de descubrir nuevas posibilidades). Hay muy buenos manuales, pero quizá demasiados para novatos y muy pocos para expertos que incluyan ejemplos fuera de los programas ya existentes de fuentes abiertas.

Te animo a que lo hagas, desde luego, el aprendizaje está garantizado ;)

Salu2



http://img359.imageshack.us/img359/6631/celliigy4.pngKeep on Rollin' :mad:

surfman
22-09-2007, 15:04
Gracias j8k6f4v9j, la verdad si es un reto muy grande, pero es mejor que lo haga, asi todos los demas lenguajes se me van a hacer mas faciles, claro que no lo voy a dominar, ni siquiera batch lo domino, hay muchas cosas escondidas con las que puedes hacer muy buenos programas a pesar de sus grandes limitaciones tanto de comandos como de versiones uindous, pero por lo menos un minituto para novatos como yo jejej:0= salu2.

surfman
22-09-2007, 15:05
For
Ejecuta un comando especificado para cada archivo de un conjunto de archivos.


Sintaxis
for {%variable | %%variable} in (grupo) do comando [opcionesDeLíneaDeComandos]
Parámetros
{%variable | %%variable}

Bueno, pues este comando es un poco mas complicado, pero no tanto, este comando lo que hace es generar un bucle, que es un bucle?, bueno es la repeticion de una accion, esto se utiliza para no tener que escribir un mismo codigo varias veces, ahorrando tiempo y dando claridad al programa.

For = Para, in = en, do = hacer, por lo que la sintaxis diria: Para la variable en el grupo hacer tal comando, la variable va a ser un numero mas que nada,
por lo que si la variable vale 5, el bucle se va a repetir 5 veces, hay dos formas de hacer un bucle for en batch, bueno hay varias, pero las mas sencillas son: metiendo a la variable el numero de archivos que exista, o metiendo a la variable un numero determinado. Primero veremos como se hace con archivos.

A otra cosa que se me olvido explicar es que la variable va a llevara al inicio un solo signo % cuando se ejecute en la consola, y dos signos % cuando se ejecute en un proceso por lotes (cuando hagas un programita), yo voy a utilizar el %% porque es el que nos interesa.

Tambien tengo que explicarles que la variable no puede ser un numero, pero si una letra, cabe mencionar que el comando for distingue entre mayusculas y minusculas, por lo que no es lo mismo la variable %a y %A, y solo pueden estar 52 variables activas al mismo tiempo (si multiplicas el numero de letras por 2 (mayusculas y minusculas) te da 52 jejje).

Ahora si, ejemplos:

supongamos que en un directorio tenemos varios archivos, y que tenemos:

tarea1.txt
tarea2.txt
tarea3.txt
foto1.jpg
foto2.jpg
foto1.bmp
foo_fighters.mp3


entonces lo que vamos a hacer es darle a la variable los archivos que queremos para que los tome como numero, ejmplo, si queremos tomar una accion para todos los archivos hacemos lo sig.:

for %%e in (*.*) do copy %%e a:\respaldo

Los parentesis siempre los tienen que poner, el for, in, do nunca cambian. Aqui lo que hacemos es simplemente decirle al for que para todos los archivos con cualquier extension que tenemos(con el comodin *) haga la siguiente accion, que es copiarlos a la unidad a:\ en la carpeta respaldo.

Otro ejemplo, si queremos borrar los archivos con extension .txt, hariamos lo sig.:

for %%g in (*.txt) do del %%g

Como ven, les menti un poco anteriormente, porque la variable en si lo que tiene dentro es el nombre del archivo que esta ejecutando, o sea que el bucle se ejecuta tantas veces como grupo de archivos haya, pero lo bueno es que se entiende no?, aqui lo unico que se hizo fue: al existir un archivo .txt guardo el nombre del archivo en la variable, entro en el bucle una vez, e hizo la accion de borrar el archivo que contenia la variable, en este caso el primer archivo, despues checo si existia un segundo archivo .txt, como si existia un segundo, cambio el valor de la variable por el segundo archivo,entro al bucle de nuevo y borro el archivo cque contenia la variable, verifico si existia un tercer archivo .txt, y como si existia, cambio el valor de la variable por el tercer archivo con extension .txt, entro al bucle y... ya se imaginaran lo que hizo, despues, verifico si existia un cuarto archivo con extension .txt y al no encontrarlo salio del bucle.

Para hacer este procedimiento sin un for, tendriamos que haber utilizado varios if y varios goto, por lo que el programa quedaria muy grande, cuando con un for de una linea podemos hacer una accon repetida las veces que sea necesario, como ven es muy util el for, aunque hay que saber utilizarlo, de otra forma no les facilitara las cosas demasiado.

Otro ejemplo, si queremos renombrar todos los archivos que tengan el nombre foto1 con cualquier extension hariamos lo sig.:

for %%L in (fot1.*) do ren %%L foto.txt

Con esto renombramos a todos los archivos foto1 de cualquier extension a foto con extension .txt

Si queremos mover mover todos los archivos que empiezen por f con cualquier extensio, hacemos lo sig.:

for %%C (f*.*) do mv %%C "e:\mis cosas"

Listo, ya entendieron creo.

Ahora veamos el otro tipo de for que les mencione antes.

Para esto utilizaremos el parametro /L del comando for, lo que vamos a hacer es, en lugar de poner un archivo o grupo de archivos entre parentesis vamos a poner un numero inicial, un contador y un numero final, el numero inicial es el numero en el que iniciara el bucle, el contador sera el numero que se le sumara a la variable, y el numero final sera cuando termine el bucle, con lo que si el numero de la variable es mayor o sobrepasa al numero final, terminara el bucle.

Vamos a hacer la secuencia en la mente, si el ni(numero inicial) es 1, el cont(contador es 1, y el nf(numero final) es 5, lo que pasaria seria lo sig.

La variable(var) toma el valor de ni, ejecuta el comando, var toma el valor de var + cont (1 + 1 = 2), ejecuta el comando, verifica si var es mayor que nf, como no lo es entra al bucle, var toma el valor de var + cont (2 + 1 = 3), ejecuta el comando, verifica si var es mayor que nf, como no lo es entra al bucle,var toma el valor de var + cont, ejecuta el comando,verifica si var es mayor que nf, como no lo es entra al bucle, ..., var(4) toma el valor de var + cont (4+1=5), verifica si var es mayor que 5, como es igual, ejecuta de nuevo el comando, pero la siguiente vuelta var sera igual a 6, entonces saldra del bucle.

Es bueno saber el procedimiento en la mente de un bucle for, porque en otros lenguajes existen otro tipo de bucles, como el while, que es un bucle tambien, pero la verificacion para salir o seguir en el bucle se da despues de haber ejecutado la accion, por lo que en un bucle while siempre se ejecutara una vez la accion, no importa cual se la condicion para salir o seguir en el bucle, bueno pero ese es otro tema, aun asi tenganlo en cuenta :) .

La sintaxis es:

for /L %%variable in (1,1,5) do comando

Tambien se puede hacer en forma decreciente poniendo como ni el numero mayor, como cont un numero negativo, y como nf el numero menor, ejemplo:

for /L %%variable in (5,-1,1) do comando

Por lo que empezara por el 5 hasta llegar al 0 donde se saldra del bucle por ser menor que 1.


***************************:)********************* ****xD*********************;)************
Bueno no voy a poner ejemplos practicos porque es hora de dormir, para al rato trabajar, pero manana si me quedan fuerzas pondre un ejemplo practico utilizando los dos tipos de bucle for que mencione junto con el sihuiente comando, salu2 a todos :), espero les haya gustado, se que tiene demasiadas explicaciones, pero es para los que nunca han usado un bucle jeje, ciao.

Nost
24-09-2007, 15:00
Joder, vas a dejar mi curso en vergüenza... Por cierto, hablando de mi curso:

Mañana, abriré un nuevo hilo con él (esta vez sin falta)...

Y por fin:

CONSOLADOR.bas, también mañana... (otro hilo nuevo :)) Aunque no tiene que ver con este hilo.

surfman
24-09-2007, 16:06
:p jajaja, :)La verdad no lo creo, tu tienes mas experiencia que yo, y ademas el tuyo sera mas util para los que ya saben programar en otro lenguaje, ademas de los simbolos > >> * etc... que los exolicas en tu tuto no?, y ademas... el tuyo serviria mas para consulta rapida o de referencia una vez aprendido a programar en batch, por que el mio da hueva leerlo por lo largo del post, bueno aun asi espero lo pongas pronto, porque ahora que estoy estudiando bash, me ha esta quitando mucho tiempo, es muy extenso, y aun no tengo ni idea de hasta donde puedes llegar con una consola en Linux, es muy interesante, bueno, salu2 Nost:0=

j8k6f4v9j
24-09-2007, 16:30
ahora que estoy estudiando bash, me ha esta quitando mucho tiempo, es muy extenso, y aun no tengo ni idea de hasta donde puedes llegar con una consola en Linux, es muy interesante
Totalmente cierto :cool: Muy muy interesante y potente.

Salu2



http://img359.imageshack.us/img359/6631/celliigy4.pngKeep on Rollin' :mad:

surfman
25-09-2007, 13:05
XD***********;:=0()*************XD**************** ******:)*********************;)************8P***** **

:o Se me esta complicando esto del bash, asi que tardare algo en poner el minituto en bash, :( , pero si lo hare, salu2.;)



Shift
Cambia la posición de parámetros por lotes en un archivo por lotes.


Sintaxis
shift

Este comando no utilza parametros `:0 uff jejje, bueno, si hay uno pero esta facil, este comando lo que hace es recorrer el valor de las variables %0 %1 %2, ... y %9, o sea que el valor que tenga %1 lo tamora %0. el valor que tenga %2 lo tomara %1, el valor que tenga %3 lo tomara %2, etc..., una vez aplicado el shift, no habra forma de recuperar el valor de %0, y no se pueden desplazar los parametros en sentido contrario.

Podemos utilizar la opcion /n, donde n = numero, esto es para desplazar solo ciertos valores, si aplicamos shift /2 desplazaria el %3 a %2, %4 a %3, etc... y dejaria el %0 y %1 con su valor intacto.


Con solo escribir shift en el programa, las variables se desplazan.



Call
Llama a un programa de proceso por lotes desde otro sin detener el programa que hace la llamada. El comando call acepta etiquetas como destino de la llamada. El comando call no tiene efecto en la línea de comandos si no se utiliza dentro de un archivo de comandos o de proceso por lotes.


Sintaxis
call [[Unidad:][rutaDeAcceso] nombreDeArchivo [parámetrosProgramaLotes]] [:Etiqueta [Argumentos]]

Este comando tambien esta facil, hay otras cosas que se pueden hacer con el, por ejemplo combinarlo con las etiquetas goto, pero para eso tienes que habilitar las extensiones de xomando, pero bueno, aqui nada mas voy a explicar el uso basico de call.

Este comando se utiliza para llamar a otro programa dentro de un programa, por ejemplo, en una parte del programa necesitamos que haga un respaldo, pero ya tenemos un programa anteriormente hecho por nosotros, por lo que podemos llamarlo, imaginemos que se encuentra en la misma carpeta, entonces haremos lo siguiente:

call respaldo

Entonces llamaria al programa respaldo, si el programa respaldo necesitara de las variables %0 o %1 o etc..., se las dariamos al igual que cuando inicias cualquier programa, ejem:

calll respaldo %0 %1
ejemplo:

call respaldo "c:/mis documentos" a:/respaldos

Si el programita que estas llamando se encontrara en otra carpeta, lo unico que harias seria poner la ruta donde seencuentra antes del nombre del programita. Ejemplo:

call c:/misprogramitas/respaldo


Listo, creo que ya di los comados para programar en batch, ahora voy a hacer un listado de los archivos mportantes de uindous donde se encuentra informacion importante, para que vean lo que les modifica un virus, y sepan que es lo que les puede hacer, o al menos imaginarse, :P

salu2