Foros del Web » Programación para mayores de 30 ;) » Programación General »

agrupar sentencias/comandos en programas batch o lotes

Estas en el tema de agrupar sentencias/comandos en programas batch o lotes en el foro de Programación General en Foros del Web. Hola como se agrupan sentencias de comandos dentro de una estructura de control en programacion batch o por lotes. por ejemplo tengo un comando IF ...
  #1 (permalink)  
Antiguo 03/06/2008, 12:08
bid
 
Fecha de Ingreso: marzo-2007
Mensajes: 32
Antigüedad: 17 años, 1 mes
Puntos: 0
agrupar sentencias/comandos en programas batch o lotes

Hola

como se agrupan sentencias de comandos dentro de una estructura de control en programacion batch o por lotes.

por ejemplo tengo un comando IF que dentro tiene un FOR y mas lineas de comandos, despues otro IF dentro de el y al final cerrar los dos IF.

no se si sera con parentesis, pero no me funciona

gracias
  #2 (permalink)  
Antiguo 04/06/2008, 01:56
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 4 meses
Puntos: 19
Respuesta: agrupar sentencias/comandos en programas batch o lotes

Un ejemplo: pruebafor.cmd

@echo off
rem by javcasta 2.008 - http://javcasta.es
for /L %%l in (1,1,255) do (
if /I %%l EQU 6 (pause
echo hola
goto sal)
for /L %%k in (1,1,255) do (
for /L %%j in (1,1,255) do (
for /L %%i in (1,1,255) do (
echo %%l.%%k.%%j.%%i
)
)
)
)
:sal
echo sal
pause



salu2
  #3 (permalink)  
Antiguo 06/06/2008, 09:53
bid
 
Fecha de Ingreso: marzo-2007
Mensajes: 32
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: agrupar sentencias/comandos en programas batch o lotes

Hola

¿Es importante que el primer comando que pertenece al IF empiece en la misma linea después de abrir el paréntesis?¿Y en los FOr no?

¿O es indiferente donde se empiece después de abrir paréntesis?

Un saludo
  #4 (permalink)  
Antiguo 06/06/2008, 09:57
bid
 
Fecha de Ingreso: marzo-2007
Mensajes: 32
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: agrupar sentencias/comandos en programas batch o lotes

Añado alguna duda mas.

¿Hay algún comando que haga algo similar que FIND pero que consuma menos CPU?

Por otro lado, el comando ELSE en el IF, ¿se puede usar y cómo?

Última edición por bid; 06/06/2008 a las 11:12
  #5 (permalink)  
Antiguo 07/06/2008, 12:47
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 4 meses
Puntos: 19
Respuesta: agrupar sentencias/comandos en programas batch o lotes

Para lo del If, consulta la ayuda:
Cita:
C:\Users\mua>if /?
Realiza el procesamiento condicional de los programas por lotes.

IF [NOT] ERRORLEVEL número comando
IF [NOT] cadena1==cadena2 comando
IF [NOT] EXIST archivo comando

NOT Especifica que Windows debe llevar a cabo el comando sólo
si la condición es falsa.

ERRORLEVEL número Especifica una condición verdadera si el último programa
que se ejecutó devolvió un código de salida igual o mayor
que el número especificado.

cadena1==cadena2 Especifica una condición verdadera si las cadenas de
texto especificadas coinciden.

EXIST archivo Especifica una condición verdadera si el archivo
especificado existe.

comando Especifica el comando que se va a ejecutar si se cumple la
condición. Comando puede ir seguido de la palabra clave
ELSE, que ejecutará el comando tras las palabra clave ELSE
si la condición especificada es FALSE.

La cláusula ELSE debe aparecer en la misma línea que la del comando que
sigue a IF Por ejemplo:

IF EXIST archivo. (
del archivo.
) ELSE (
echo archivo. no existente.
)

Lo siguiente NO funcionará porque el comando del debe terminar con una
nueva línea:

IF EXIST archivo. del archivo. ELSE echo archivo. no existente

Tampoco funcionaría lo siguiente, ya que el comando ELSE debe estar en la
misma línea que el comando IF:

IF EXIST archivo. del archivo.
ELSE echo archivo. no existente

Si desea mantenerlo todo en una misma línea, lo siguiente funcionaría:

IF EXIST archivo. (del archivo.) ELSE echo archivo. no existente

Si los comandos de extensión están habilitados IF cambia así:

IF [/I] cadena1 op-de-comparación cadena2 comando
IF CMDEXTVERSION número comando
IF DEFINED variable comando

donde op-de-comparación puede ser:

EQU - igual
NEQ - no igual
LSS - menor que
LEQ - menor que o igual
GTR - mayor que
GEQ - mayor que o igual

y el modificador /I, si se especifica, realiza comparaciones de cadena que
no distinguen entre mayúsculas y minúsculas. El modificador /I también puede
usarse en la forma cadena1==cadena2 de IF. Estas comparaciones son genéricas,
por lo que si tanto cadena1 como cadena2 se constituyen únicamente por dígitos
numéricos, entonces las cadenas se convierten a números y se realiza una
comparación numérica.

El condicional CMDEXTVERSION funciona sólo como ERRORLEVEL, excepto si se
compara con un número de versión interna asociada con las extensiones de
comando. La primera versión es 1. Será incrementada en uno cuando las
significantes mejoras sean agregadas a las extensiones de comando. El
condicional CMDEXTVERSION nunca es verdadero cuando las extensiones de
comando están deshabilitadas.

El condicional DEFINED funciona sólo como EXISTS excepto cuando toma un
nombre de variable de entorno y vuelve como verdadero si se define la
variable de entorno.

%ERRORLEVEL% se expandirá a una representación de cadena del valor actual
de ERRORLEVEL, siempre y cuando no exista ya una variable de entorno con el
nombre ERRORLEVEL, en cuyo caso obtendrá su valor.

Después de ejecutar un programa, lo siguiente ilustrará el uso de ERRORLEVEL

goto answer%ERRORLEVEL%
:respuesta0
echo Programa ha devuelto el código 0
:respuesta1
echo Programa ha devuelto el código 1

También puede usar las comparaciones numéricas anteriores:

IF %ERRORLEVEL% LEQ 1 goto okay

%CMDCMDLINE% se expandirá a una línea de comando original pasada al anterior
CMD.EXE a cualquier proceso CMD.EXE, siempre y cuando no exista ya una
variable de entorno con el nombre CMDCMDLINE, en cuyo caso obtendrá su valor.

%CMDEXTVERSION% se expandirá a una representación de la cadena del valor
actual CMDEXTVERSION, siempre y cuando no exista ya una variable de entorno
con el nombre CMDEXTVERSION, en cuyo caso obtendrá su valor
Respecto a FIND, tendrias que probar con FINDSTR, y monitorizar el rendimiento de la cpu ...

Respecto a lo de las posiciones de las lineas te aconsejo que te hagas los script cmd con ditintas situaciones y lo evalues tu mismo, es como se aprende realmente ...

salu2
  #6 (permalink)  
Antiguo 10/06/2008, 11:28
bid
 
Fecha de Ingreso: marzo-2007
Mensajes: 32
Antigüedad: 17 años, 1 mes
Puntos: 0
Respuesta: agrupar sentencias/comandos en programas batch o lotes

Hola

¿Como se hace para poner varios if seguidos y despues el comando?
p.ej

if exist archivo if comparacion1 if comparacion2... if comparacionn comando

hay algun simbolo como & o ^ o algo asi?

gracias
  #7 (permalink)  
Antiguo 10/06/2008, 11:40
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: agrupar sentencias/comandos en programas batch o lotes

Cita:
Iniciado por bid Ver Mensaje
Hola

¿Como se hace para poner varios if seguidos y despues el comando?
p.ej

if exist archivo if comparacion1 if comparacion2... if comparacionn comando

hay algun simbolo como & o ^ o algo asi?

gracias
No sé si se puede poner todo en la misma línea pero lo puedes poner en varias, así:
Código:
 
if not exist archivo goto nocumple
if not comparacion1 goto nocumple
if not comparacion2 goto nocumple
:cumple
echo aquí poner los comandos si cumple las comparaciones
goto fin
:nocumple
echo no cumplen las comparaciones
:fin
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 10/06/2008, 14:10
Avatar de dogduck  
Fecha de Ingreso: enero-2006
Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 18 años, 4 meses
Puntos: 19
Respuesta: agrupar sentencias/comandos en programas batch o lotes

Si se puede

Código:
@echo off
if exist c:\ntldr if exist c:\boot.ini if exist c:\pagefile.sys echo "cadena de if"
if not exist c:\noes.txt if not exist c:\noes2.txt if not exist c:\noes3.txt echo "otra cadena de if"
pause
La idea que te da David es buena, jugar con etiquetas, y hace que estructures el flujo del script

salu2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:11.