[Batch] BUCLE FOR se repite varias veces

Iniciado por wareware, 28 Agosto 2011, 17:23 PM

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

wareware

Hola, quería comentar lo que me pasa con este Script:
FOR /L %%g IN (3,1,25) DO (
for /F "tokens=*" %%i in (Q:\Listado.txt) do (
net user %%i%%g user%%g /comment:"%%i" /add
)
)


En el txt hay un listado de 23 usuarios
Me crea los usuarios sin problema
pero el bucle no se cierra y lo repite varias veces
con el consiguiente error: "usuario ya existe"

El primer FOR debe empezar por el 3 ya que esta relacionado con el password del usuario

Gracias por vuestra ayuda.

leogtz

La sintáxis está bien, la lógica no. Debes de tener en cuenta que por cada iteración del bucle externo se iterará 23 veces (los 23 usuarios que tienes en el txt).

Quizá esto te sirva (no probado):

@echo off
setlocal enabledelayedexpansion
set /a contador=3
for /F "tokens=*" %%i in (Q:\Listado.txt) do (
net user %%i!contador! user!contador! /comment:"%%i" /add
set /a contador+=1
)
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

wareware

Perfectamente claro. Muchas gracias por la respuesta, Muy aclaratoria y funciona perfectamente.

Si en vez de utilizar bucle numerico fuese todo texto, la estructura sería correcta?
O hay otra forma mas correcta de escribirlo? He leido que usar un FOR dentro de otro no es muy correcto.

Por ejemplo:

for /F "tokens=*" %%i in (Usuarios.txt) do (
for /F "tokens=*" %%j in (Passwords.txt) do (
net user %%i %%j /comment:"%%i" /add
)
)


Gracias por la ayuda

leogtz

Cita de: wareware en 28 Agosto 2011, 21:12 PM

Si en vez de utilizar bucle numerico fuese todo texto, la estructura sería correcta?

Habría que ver el caso, no sé decirte con exactitud, pero la solución que te dí es la más indicada en Batch, en otro lenguaje se podrían hacer mejoras y posiblemente la solución te quede en dos líneas o quizás una.

Cita de: wareware en 28 Agosto 2011, 21:12 PM
O hay otra forma mas correcta de escribirlo? He leido que usar un FOR dentro de otro no es muy correcto.

Muchisimos algoritmos, ordenación, búsqueda, etc se construyen con dos ciclos anidados, así que lo que has leído es totalmente falso e incorrecto. El problema viene cuando son muchos ciclos anidados, se torna ineficiente la solución y además lenta.

Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com