Autor
|
Tema: [Batch] Recorrer un fichero asignando usuarios a grupos determinados (Leído 3,153 veces)
|
gregory90
Desconectado
Mensajes: 190
|
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: #Apellido1;Apellido2;Nombre;Cargo;Turno ape1;ape2;user1;Administrativo;7:00 a 15:00 ape1;ape2;user2;Administrativo;7:00 a 15:00 ape1;ape2;user3;Administrativo;7:00 a 15:00 ape1;ape2;user4;Administrativo;7:00 a 15:00 ape1;ape2;user5;Administrativo;15:00 a 23:00 ape1;ape2;user6;Administrativo;15:00 a 23:00 ape1;ape2;user7;Administrativo;15:00 a 23:00 ape1;ape2;user8;Administrativo;15:00 a 23:00 ape1;ape2;user9;Jefe Departamento;7:00 a 23:00
El fichero por lotes tendría el siguiente código: setlocal enabledelayedexpansion net localgroup Manana /add net localgroup Tarde /add net localgroup Jefes /add net localgroup "Administradores" "Jefes" /add for /f "eol=# delims=; tokens=1-5" %%i in (empleados.txt) do ( set apellido1=%%i set apellido2=%%j set nombre=%%k set cargo=%%l set turno=%%m set login=!nombre!!apellido1:~0,1!!apellido2:~0,1! set manana="7:00 a 15:00" set tarde="15:00 a 23:00" set matarde="7:00 a 23:00" if "%turno%" == "%manana%" net localgroup "Manana" "!login!" /add if "%turno%" == "%tarde%" net localgroup "Tarde" "!login!" /add if "%turno%" == "%matarde%" net localgroup "Jefes" "!login!" /add )
Básicamente lo que me está fallando es las condiciones, en la siguiente condición por ejemplo. 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
Conectado
Mensajes: 9.878
|
Básicamente lo que me está fallando es las condiciones, en la siguiente condición por ejemplo. 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: If " !turno!" EQU " !manana!" (net localgroup "Manana" "!login!" /add ) If " !turno!" EQU " !tarde!" (net localgroup "Tarde" "!login!" /add ) 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
Mensajes: 190
|
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
Conectado
Mensajes: 9.878
|
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: set manana="7:00 a 15:00" set tarde="15:00 a 23:00" set matarde="7:00 a 23:00"
...y probablemente eso no es lo que querías hacer. La sintaxis correcta sería la siguiente: set "manana=7:00 a 15:00" set "tarde=15:00 a 23:00" 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
Mensajes: 190
|
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: set "manana=7:00 a 15:00" set "tarde=15:00 a 23:00" 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
Conectado
Mensajes: 9.878
|
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:
( el valor de "%var%" será "qwerty ") Saludos!
|
|
« Última modificación: 4 Febrero 2018, 11:56 am por Eleкtro »
|
En línea
|
|
|
|
gregory90
Desconectado
Mensajes: 190
|
Entiendo si. Gracias Elektro. Me aclaraste el tema perfectamente. Saludos!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Batch] Recorrer directorio
Scripting
|
acoevil
|
3
|
10,259
|
29 Enero 2012, 19:43 pm
por leogtz
|
|
|
Recorrer un fichero y meterlo en un vector/Matriz/etc
Programación C/C++
|
TheShocker
|
0
|
1,571
|
21 Junio 2015, 16:34 pm
por TheShocker
|
|
|
Ocultar carpetas de un FTP en Windows Server 2012 para determinados usuarios
Redes
|
Geek
|
0
|
2,564
|
5 Diciembre 2017, 22:51 pm
por Geek
|
|
|
Problema al crear usuarios desde el contenido de un fichero de texto (BATCH)
Scripting
|
juntacadaveres
|
6
|
3,476
|
23 Abril 2019, 16:35 pm
por MCKSys Argentina
|
|
|
MOVIDO: Problema al crear usuarios desde el contenido de un fichero de texto (BATCH)
Programación General
|
MCKSys Argentina
|
0
|
2,274
|
22 Abril 2019, 16:25 pm
por MCKSys Argentina
|
|