elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Batch] Recorrer un fichero asignando usuarios a grupos determinados
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Batch] Recorrer un fichero asignando usuarios a grupos determinados  (Leído 2,818 veces)
gregory90

Desconectado Desconectado

Mensajes: 190


Ver Perfil
[Batch] Recorrer un fichero asignando usuarios a grupos determinados
« en: 3 Febrero 2018, 23:14 pm »

Hola,

Tengo un fichero por lotes para la creación de usuarios y grupos. En el siguiente caso los usuarios ya están previamente creados, y el siguiente código crearía los grupos y asignaría los usuarios al grupo de turnos correspondiente en base al turno que tengan.


Este sería el fichero empleados.txt que se le pasaría al for para recorrerlo:

Código
  1. #Apellido1;Apellido2;Nombre;Cargo;Turno
  2. ape1;ape2;user1;Administrativo;7:00 a 15:00
  3. ape1;ape2;user2;Administrativo;7:00 a 15:00
  4. ape1;ape2;user3;Administrativo;7:00 a 15:00
  5. ape1;ape2;user4;Administrativo;7:00 a 15:00
  6. ape1;ape2;user5;Administrativo;15:00 a 23:00
  7. ape1;ape2;user6;Administrativo;15:00 a 23:00
  8. ape1;ape2;user7;Administrativo;15:00 a 23:00
  9. ape1;ape2;user8;Administrativo;15:00 a 23:00
  10. ape1;ape2;user9;Jefe Departamento;7:00 a 23:00


El fichero por lotes tendría el siguiente código:

Código
  1. setlocal enabledelayedexpansion
  2.  
  3. net localgroup Manana /add
  4. net localgroup Tarde /add
  5. net localgroup Jefes /add
  6. net localgroup "Administradores" "Jefes" /add
  7.  
  8. for /f "eol=# delims=; tokens=1-5" %%i in (empleados.txt) do (
  9. set apellido1=%%i
  10. set apellido2=%%j
  11. set nombre=%%k
  12. set cargo=%%l
  13. set turno=%%m
  14. set login=!nombre!!apellido1:~0,1!!apellido2:~0,1!
  15. set manana="7:00 a 15:00"
  16. set tarde="15:00 a 23:00"
  17. set matarde="7:00 a 23:00"
  18.  
  19. if "%turno%" == "%manana%" net localgroup "Manana" "!login!" /add
  20. if "%turno%" == "%tarde%" net localgroup "Tarde" "!login!" /add
  21. if "%turno%" == "%matarde%" net localgroup "Jefes" "!login!" /add
  22. )

Básicamente lo que me está fallando es las condiciones, en la siguiente condición por ejemplo.
Código
  1. if "%turno%" == "%manana%

Por lo que entiendo es que siempre se va cumplir?? o es lo que hace al ejecutar el script. Sin embargo, yo no lo veo tan claro, ya que si no se cumple saltaría al siguiente if hasta llegar al que se cumpla, sino se cumple ninguno saldría de la ejecución no?

Gracias y saludos!


« Última modificación: 4 Febrero 2018, 13:24 pm por gregory90 » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.818



Ver Perfil
Re: [Batch] Recorrer un fichero asignando usuarios a grupos determinados
« Respuesta #1 en: 4 Febrero 2018, 00:19 am »

Básicamente lo que me está fallando es las condiciones, en la siguiente condición por ejemplo.
Código
  1. if "%turno%" == "%manana%

Por lo que entiendo es que siempre se va cumplir??

Lo que ocurre es que no estás expandiendo el valor de las variables %turno%, %manana%, %tarde% y %matarde%. Su valor siempre es "nulo", y comparar "nulo" con "nulo" siempre devolverá positivo.

Debes usar el operador ! en lugar de % al igual que lo haces con la variable login!, !nombre! y !apellido!... debes hacer lo mismo con todas y cada una de las variables que declares dentro del bloque del For.

Quedaría algo parecido a esto:

Código
  1. If "!turno!" EQU "!manana!"  (net localgroup "Manana" "!login!" /add)
  2. If "!turno!" EQU "!tarde!"   (net localgroup "Tarde"  "!login!" /add)
  3. If "!turno!" EQU "!matarde!" (net localgroup "Jefes"  "!login!" /add)

Saludos.


« Última modificación: 4 Febrero 2018, 00:29 am por Eleкtro » En línea

gregory90

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: [Batch] Recorrer un fichero asignando usuarios a grupos determinados
« Respuesta #2 en: 4 Febrero 2018, 01:42 am »

Debes usar el operador ! en lugar de % al igual que lo haces con la variable login!, !nombre! y !apellido!... debes hacer lo mismo con todas y cada una de las variables que declares dentro del bloque del For.

Ya cierto, y lo había probando así inicialmente, ya probé de muchas formas y sigue sin funcionar, acabo de probar con EQU por si puede ser por ==, en meterlo entre parantesis, aunque siendo una única operación daría igual.

Sigue fallando, quiero decir con fallando de que no me hace nada realmente, se ejecuta sin errores. Pero no me añade los usuarios a ningún grupo.

Por más que le doy vueltas no veo que puede estar pasando...
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.818



Ver Perfil
Re: [Batch] Recorrer un fichero asignando usuarios a grupos determinados
« Respuesta #3 en: 4 Febrero 2018, 01:54 am »

Sigue fallando, quiero decir con fallando de que no me hace nada realmente, se ejecuta sin errores. Pero no me añade los usuarios a ningún grupo.

Por más que le doy vueltas no veo que puede estar pasando...

Entonces probablemente sea un error de diseño en el algoritmo con respecto al análisis/parsing de datos. Sin saber lo que hay escrito en el archivo 'empleados.txt' y sin saber el string que devuelve la variable !turno! y !login!, se hace dificil saber que ocurre. Usa el comando ECHO para visualizar el valor de las variables antes de intentar añadir los usuarios, y eso te ayudará a determinar lo que puedes estar haciendo o comparando mal, o al menos a obtener alguna pista sobre ello.

Por ejemplo, aquí le estás añadiendo comillas dobles al principio y al final de cada valor:
Citar
Código
  1. set manana="7:00 a 15:00"
  2. set tarde="15:00 a 23:00"
  3. set matarde="7:00 a 23:00"

...y probablemente eso no es lo que querías hacer. La sintaxis correcta sería la siguiente:
Código
  1. set "manana=7:00 a 15:00"
  2. set "tarde=15:00 a 23:00"
  3. set "matarde=7:00 a 23:00"

Saludos!
« Última modificación: 4 Febrero 2018, 02:01 am por Eleкtro » En línea

gregory90

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: [Batch] Recorrer un fichero asignando usuarios a grupos determinados
« Respuesta #4 en: 4 Febrero 2018, 11:28 am »

Sin saber lo que hay escrito en el archivo 'empleados.txt' y sin saber el string que devuelve la variable !turno! y !login!, se hace dificil saber que ocurre.

El fichero "empleados.txt" lo dejara escrito en el princpio del post.

...y probablemente eso no es lo que querías hacer. La sintaxis correcta sería la siguiente:
Código
  1. set "manana=7:00 a 15:00"
  2. set "tarde=15:00 a 23:00"
  3. set "matarde=7:00 a 23:00"

Efectivamente era eso las comillas... pensaba que al establecer variables no tenían por que ir entre comillas (la propia variable), sino solamente el string que en este caso llevaba espacios en blanco.

Así ya funciona, comprobé con echo, y veo que ahora si le da el valor que corresponde, antes le daba el valor por ejemplo "7:00 a 15:00" y no 7:00 a 15:00 (sin comillas) que es el que está en el fichero de texto que se le pasa.

De ese modo, englobando todo entre comillas, entiendo que que coge todo? o como?

Saludos. y gracias @Eleкtro  ;)
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.818



Ver Perfil
Re: [Batch] Recorrer un fichero asignando usuarios a grupos determinados
« Respuesta #5 en: 4 Febrero 2018, 11:42 am »

El fichero "empleados.txt" lo dejara escrito en el princpio del post.

Discúlpame, se me fue la pinza xD... eso me pasa por abrir varios threads del foro al mismo tiempo y leer deprisa las dudas en los posts. Te respondí todo lo que te dije sin fijarme en el formato de ese CSV, de lo contrario diréctamente te habría mencionado lo de las comillas dobles al ver como era el formato de tu CSV y como estabas declarando las variables.

De ese modo, englobando todo entre comillas, entiendo que que coge todo? o como?

Exactamente, "lo coge todo" como bien dices, bueno, las variables que declaraste también lo cogen todo... cogen todo lo que hayas escrito despues del símbolo "=", incluyendo las comillas dobles que le añadiste al principio y final del string. Simplemente la próxima vez asegúrate de hacerlo como te mostré para evitar que eso suceda. Esa es la forma recomendada para declarar variables, de lo contrario puedes cometer fallos humanos como el que ya has tenido, o como el de este otro ejemplo:

Código
  1. Set var=qwerty    & (Echo.)
  2.  
  3. Echo "%var%"
( el valor de "%var%" será "qwerty    ")

Saludos!
« Última modificación: 4 Febrero 2018, 11:56 am por Eleкtro » En línea

gregory90

Desconectado Desconectado

Mensajes: 190


Ver Perfil
Re: [Batch] Recorrer un fichero asignando usuarios a grupos determinados
« Respuesta #6 en: 4 Febrero 2018, 12:24 pm »

Entiendo si. Gracias Elektro. Me aclaraste el tema perfectamente.

Saludos!  ;-)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines