Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - juntacadaveres

#51
Cita de: MCKSys Argentina en 22 Abril 2019, 16:31 PM
Hola!

Si ejeuctas el bat como admin, entonces el directorio actual cambia. Por eso el script no encuentra el archivo.

Si el txt esta en el mismo dir que el bat, entonces podrias usar %~dp0 para obtener el path completo al bat (sin el filename).

Mas info: https://stackoverflow.com/questions/4419868/what-is-the-current-directory-in-a-batch-file

Saludos!

Hola
El enunciado del script que me mandaron era así:

Ejercicio 11.
Crea un batch que, partiendo de un fichero, cree los usuarios especificados. El fichero
se denominará USUARIOS.TXT y sus registros seguirán el siguiente patrón
NOMRE:CONTRASEÑA. Se comprobará si el usuario existe. Si existe, no se crea y se informa. Si
no existe, se pide confirmación, se crea y se informa. Tras la creación de cada usuario se
pregunta si se desea continuar con el siguiente registro (mostrando el nombre de usuario a
crear) o abandonar.

Contenido del texto:

CitarGILBERTO:GILBERTO
PEPITO:PEPITO
SAMSUNG:SAMSUNG
JUDASPRIEST:JUDASPRIEST
JOSEFINA:JOSEFINA
GABRIEL:GABRIEL

Bueno, yo hice el script siguiente:


Código (dos) [Seleccionar]

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
REM COMPROBAR PERMISOS
NET SESSION >NUL 2>NUL
   IF NOT ERRORLEVEL 1 (
       GOTO :COMPROBAR
   ) ELSE (
       ECHO NO TIENES PERMISO PARA USAR ESTE FICHERO && PAUSE>NUL && EXIT
   )
:COMPROBAR
FOR /F "TOKENS=1,2 DELIMS=:" %%A IN (C:\Users\alumno\Desktop\USUARIOS.txt) DO (
   NET USER %%A >NUL 2>NUL
       IF NOT ERRORLEVEL 1 (
           ECHO EL USUARIO %%A YA EXISTE && PAUSE>NUL
       ) ELSE (
           ECHO ========================
           ECHO EL USUARIO %%A NO EXISTE
           ECHO 1- CREAR
           ECHO 2- SALIR
           ECHO ========================
           SET /P OPT="QUE DESEA HACER? >"
           IF !OPT! EQU 1 (
               NET USER %%A %%B /ADD >NUL && ECHO EL USUARIO %%A SE HA CREADO && TIMEOUT 1 /NOBREAK >NUL
           )
           IF !OPT! EQU 2 (
               ECHO SALIENDO DEL PROGRAMA... && PAUSE>NUL && EXIT
           )
       )
)
PAUSE>NUL


Funcionar, funciona perfectamente
pero solo si fichero USUARIOS.txt se encuentra en el escritorio
y el usuario es alumno. (C:\users\alumno....)
Que pasaría si el batch me lo llevo a otra computadora.
Habría que cambiarle la ruta completa en el contenido del FOR
C:\Users\alumno\Desktop\USUARIOS.txt
o habría otra forma ??
Lo digo porque al ejecutarlo como administrador, el directorio actual cambia.
Y es obvio que si me lo llevo a otra computadora el directorio del texto lo debo cambiar
Yo quiero que el mismo batch se encuentre en la misma carpeta que el fichero USUARIOS.txt
Que habría que modificarle al script?
%~dp0 ?
#52
Cita de: EdePC en 22 Abril 2019, 19:30 PM
Saludos,

- Las variables en Bacth tienen un comportamiento inusual cuando se ejecutan en sentencias de una sola línea como sentencia & sentencia, o sentencia | sentencia, etc, las sentencias que van entre paréntesis se consideran que van en línea.

- Ese comportamiento inusual hace que las variables  no actualicen sus valores, se le asigna un valor la primera vez y luego no se notarán siguientes cambios hasta que termine la sentencia en línea.

- Para solucionar esto se utiliza SETLOCAL EnableDelayedExpansion, esto hace que las variables si se actualicen tal como se espera, pero las variables deben cambiar su notación %variable% por !variable!.

- Recuerda que para SET /A no es necesario utilizar %variable% o !variable!, esto se sobreentiende.

Código (dos) [Seleccionar]
@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET NUM1=1
SET NUM2=2
SET OPT=
SET SUM=
IF !NUM1!==!NUM2! (
   ECHO SON IGUALES
) ELSE (
   ECHO NO SON IGUALES
   ECHO PEQUENIO MENU CON DOS OPCIONES
   ECHO 1- SUMAR
   ECHO 2- SALIR
   SET /P OPT="SELECCIONA UNA OPCION > "
   IF "!OPT!"=="1" GOTO A
   IF "!OPT!"=="2" GOTO B
)

:A
SET /A SUM=NUM1 + NUM2
ECHO EL RESULTADO DE 1 + 2 ES !SUM!
PAUSE>NUL && EXIT

:B
ECHO SALIENDO DEL PROGRAMA && PAUSE>NUL && EXIT
PAUSE>NUL


- Otra forma es usando CALL. Ver el comportamiento de todo esto en:
https://ss64.com/nt/delayedexpansion.html

Muchas gracias por tu ayuda.
#53
Mejoré el script

Código (dos) [Seleccionar]
@ECHO OFF
SET NUM1=1
SET NUM2=2
SET OPT=
SET SUM=
IF %NUM1%==%NUM2% (
    ECHO SON IGUALES
) ELSE (
    ECHO NO SON IGUALES
    ECHO PEQUENIO MENU CON DOS OPCIONES
    ECHO 1- SUMAR
    ECHO 2- SALIR
    SET /P OPT="SELECCIONA UNA OPCION > "
    IF "%OPT%"=="1" GOTO A
    IF "%OPT%"=="2" GOTO B
)

:A
SET /A SUM= %NUM1% + %NUM2%
ECHO EL RESULTADO DE 1 + 2 ES %SUM%
PAUSE>NUL && EXIT

:B
ECHO SALIENDO DEL PROGRAMA && PAUSE>NUL && EXIT
PAUSE>NUL


Y no me funciona
en ambos casos me manda hacia A
aunque ponga B
#54
He estado haciendo un script para creación de usuarios desde el contenido de un archivo de texto plano y estoy sospechando de que no me sale por poner un IF después de un ELSE. Así que hice un script más simple aparte para comprobar si esto era cierto
aquí el script:

Código (dos) [Seleccionar]
@ECHO OFF
SET NUM1=1
SET NUM2=2
SET OPT=
SET SUM=
IF %NUM1%==%NUM2% (
   ECHO SON IGUALES
) ELSE (
   ECHO NO SON IGUALES
   ECHO PEQUENIO MENU CON DOS OPCIONES
   ECHO A- SUMAR
   ECHO B- SALIR
   SET /P OPT="SELECCIONA UNA OPCION > "
   IF "%OPT%"=="A" (
       SET /A SUM= %NUM1% + %NUM2%
       ECHO EL RESULTADO DE 1 + 2 ES %SUM%
   )
   IF "%OPT%"=="B" (
       ECHO SALIENDO DEL PROGRAMA && PAUSE>NUL && EXIT
   )
)

PAUSE>NUL

El script funciona correctamente hasta llegar al apartado del IF "%opt%"
#55
Cita de: MCKSys Argentina en 22 Abril 2019, 16:31 PM
Hola!

Si ejeuctas el bat como admin, entonces el directorio actual cambia. Por eso el script no encuentra el archivo.

Si el txt esta en el mismo dir que el bat, entonces podrias usar %~dp0 para obtener el path completo al bat (sin el filename).

Mas info: https://stackoverflow.com/questions/4419868/what-is-the-current-directory-in-a-batch-file

Saludos!

Hola, gracias por contestar
no habría otra forma de hacer esto?
es que eso que mencionas tú no lo hemos visto en clase
y si le pongo cosas que no hayamos visto en clase mi profesor no lo valorará
por muy asqueroso que parezca
#56
Tengo este archivo de texto plano
CitarPEPITO:PEPITO
SAMSUNG:SAMSUNG
JUDASPRIEST:JUDASPRIEST
HOJA:HOJA
CAMA:ALMOHADA
USUARIO1:USUARIO2

El primer campo son los nombres de usuarios y el segundo son las contraseñas.
El caracter delimitador es el símbolo ':'
A partir de esto debo crear cuentas de usuario en windows mediante un script de batch
yo he hecho esto

Código (dos) [Seleccionar]

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "TOKENS=1,2 DELIMS=:" %%A IN (USUARIOS.txt) DO (
    ECHO USUARIO: %%A CON: %%B
)
PAUSE>NUL


RESULTADO
CitarUSUARIO: PEPITO CON: PEPITO
USUARIO: SAMSUNG CON: SAMSUNG
USUARIO: JUDASPRIEST CON: JUDASPRIEST
USUARIO: HOJA CON: HOJA
USUARIO: CAMA CON: ALMOHADA
USUARIO: USUARIO1 CON: USUARIO2

Ahora bien
si agrego el comando NET USER para agregar cuentas en el sistema operativo:


Código (dos) [Seleccionar]
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

FOR /F "TOKENS=1,2 DELIMS=:" %%A IN (USUARIOS.txt) DO (
    ECHO USUARIO: %%A CON: %%B
    NET USER %%A %%B /ADD
)
PAUSE>NUL


ejecuto el script para tener derechos y el resultado es el siguiente:

El sistema no puede encontrar el archivo USUARIOS.txt.

Por qué??
#57
Cita de: EdePC en 21 Abril 2019, 17:50 PM
Saludos,

- Utilizar comillas implica comparar String (texto), en este caso se ordena de menor a mayor 0-9 A-Z a-z, por esto "a" < "b" y "10" < "5"

- Los operadores de comparación EQU, NEQ, LSS, LEQ, GTR, GEQ son usados para comparar números tal cual y los números no van entre comillas.


muchas gracias
#58
Con este script que hice aparte si me funciono

Código (dos) [Seleccionar]
@ECHO OFF
SET NUM1=
SET NUM2=
SET /P NUM1="DAME UN NUMERO> "
SET /P NUM2="DAME OTRO NUMERO> "
IF %NUM1% GTR %NUM2% (
   ECHO EL NUMERO %NUM1% ES MAYOR QUE %NUM2%
   SET NUM1=%NUM2%
   SET NUM2=%NUM1%
)
ECHO NUMERO1= %NUM1%
ECHO NUMERO2= %NUM2%
PAUSE>NUL


Lo que estropeaba el script eran las comillas 
"%NUM1%" GTR "%NUM2%"
alguien me puede decir por qué?
mi profesor siempre usa comillas en las variables...
#59
Hola al parecer todo funcionaba
hasta que meto como primer número un [10-19]
y como segundo numero uno menor a estos





No sé cómo arreglar esto

numero 1: 10
numero 2: 5
se supone que numero 10 es mayor que 5
pero el batch no lo detecta. ayuda por favor.
#60
Hola
me vuelvo a responder otra vez
la cuestión estaba en los paréntesis
que toma como una sola línea todo lo que hay dentro de él.
saludos