[BATCH] Cómo se podrían guardar variables?

Iniciado por Duning, 31 Julio 2012, 01:14 AM

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

Duning

Hola....otra vez xD.

Bueno, lo que vengo preguntado es cómo puedo hacer para que el bat pueda leer líneas de un txt (u otro tipo) para utilizarlas como constates una vez cerrado el bat, me explico.

Quiero que alguien venga y:

Código (dos) [Seleccionar]
set /p NOMBRE=
escriba por ejemplo "pepe"

Cierre el bat, lo vuelva a abrir y cuando haga

Código (dos) [Seleccionar]
echo %NOMBRE%
Salga pepe

Quiero esto porque estoy intentado hacer un bat en el que cambias nombres a una serie de cosas. Y cuando re abras el bat, quiero que las recuerde.

Pues sobretodo eso, gracias por adelantado.

Eleкtro

#1
Las variables, logicamente solo tienen efecto en la ejecución del script... Y cuando finaliza la instancia de la CMD, finaliza el almacenamiento de las variables en la memoria.

Hay varias formas de "recordar" eso... Guardando la variable "nombre" en un archivo temporal, O guardandolo en el mismo script (Al final del script), O agregando una variable de entorno al sistema:

Código (dos) [Seleccionar]

@Echo OFF
If defined NOMBRE (Echo Varible NOMBRE = %NOMBRE%)
SETX "NOMBRE" "elhacker.net" >NUL
pause
exit


Saludos








Duning

#2
Cita de: EleKtro H@cker en 31 Julio 2012, 02:24 AM
Las variables, logicamente solo tienen efecto en la ejecución del script... Y cuando finaliza la instancia de la CMD, finaliza el almacenamiento de las variables en la memoria.

Hay varias formas de "recordar" eso... Guardando la variable "nombre" en un archivo temporal, O guardandolo en el mismo script (Al final del script), O agregando una variable de entorno al sistema:

Código (dos) [Seleccionar]

@Echo OFF
If defined NOMBRE (Echo Varible NOMBRE = %NOMBRE%)
SETX "NOMBRE" "elhacker.net" >NUL
pause
exit


Saludos


Código (dos) [Seleccionar]
"SETX" no se reconoce como un comando interno o externo,
programa o archivo de lotes ejecutable.
Presione una tecla para continuar . . .


Me salta ese error :C alguna idea? btw estoy en XP

Otra cosa son unos errores que no se por que tengo :C

1.
Código (dos) [Seleccionar]
COPY minecrafts1.jar %appdata%\.minecraft\bin\Jars
Me dice "La sintaxis del comando no es correcta."
Pero aqui dice que es así...
http://www.elhacker.net/ProgramacionBat.html

CitarCOPY [opciones] [origen] [destino]

2.

Código (dos) [Seleccionar]
RD %HOMEPATH%\Escritorio\Meter_el_Jar_aqui

Me dice:

Código (dos) [Seleccionar]
El nombre del directorio no es válido.
El sistema no puede hallar el archivo especificado.
El sistema no puede hallar la ruta especificada.


Esto no lo entiendo para nada, me salen 3 errores por una sola linea de comando, y lo unico que quiero hacer es borrar la carpeta "Meter_el_Jar_aquí" que está ubicada en "%HOMEPATH%\Escritorio\Meter_el_Jar_aqui"

Una ayudita por favor...

Eleкtro

Te voy a dar un consejo para novatos:

Si alguna vez te falla un comando, usa "ECHO" al principio del comando para ver el error.

Ejemplo:
Este comando no te funciona:
RD %HOMEPATH%\Escritorio\Meter_el_Jar_aqui

Con echo podemos ver porqué:


Como ves, La variable %HOMEPATH% no usa la letra de la unidad, Y sin la letra (C:) el comando falla.








Cita de: Duning en 31 Julio 2012, 14:48 PM
Código (dos) [Seleccionar]
"SETX" no se reconoce como un comando interno o externo,
estoy en XP

SETX no está instalado en WindowsXP por defecto (En Windows 7 sí). Aquí puedes bajarlo: Windows XP Service Pack 2 Support Tools



Cita de: Duning en 31 Julio 2012, 14:48 PM
Código (dos) [Seleccionar]
COPY minecrafts1.jar %appdata%\.minecraft\bin\Jars
Me dice "La sintaxis del comando no es correcta."

El comando falla porque falta el slash al final de la ruta. (\)
Aparte, Deberías usar comillas dobles cuando escribas rutas que puedan contener espacios.

COPY "minecrafts1.jar" "%appdata%\.minecraft\bin\Jars\"
Debes usarlo siempre en el comando copy para que pueda diferenciar lo que es una carpeta, y lo que es un archivo.



Cita de: Duning en 31 Julio 2012, 14:48 PM
Código (dos) [Seleccionar]
RD %HOMEPATH%\Escritorio\Meter_el_Jar_aqui
Código (dos) [Seleccionar]
El nombre del directorio no es válido.

Esto ya lo expliqué antes pero no te lo solucioné, Ok, Debes usar la variable %USERPROFILE%.
RD "%userprofile%\Desktop\Meter_el_Jar_aqui"


Saludos








Binary_Death

Si te es necesario mantener el valor de una variable, siempre puedes guardarla como variable de entorno.

Vamos a ver, la ruta del registro es esta:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment


Ahí, como puedes ver, todos los valores son REG_SZ, por tanto, haciendo un:


REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "nombre" /d "pepe" /f


Ahora cierra la cmd. Vuelve a abrirla (aunque creo que es necesario reiniciar primero el sistema). Escribe:


echo.%nombre%


Y como ves, el nombre de "pepe" quedó guardado.

De todas formas, estoy seguro de que para cualquier cosa que pretendas hacer, habrá métodos más eficientes.

Duning

#5
Muchísimas gracias por todo ^^

Pero una cosa...

CitarSETX no está instalado en WindowsXP por defecto (En Windows 7 sí). Aquí puedes bajarlo: Windows XP Service Pack 2 Support Tools

Y no hay otro modo que no sea con el SETX para XP?

Enserio tio, muchísimas gracias :D




Cita de: Binary_Death en 31 Julio 2012, 16:41 PM
Si te es necesario mantener el valor de una variable, siempre puedes guardarla como variable de entorno.

Vamos a ver, la ruta del registro es esta:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment


Ahí, como puedes ver, todos los valores son REG_SZ, por tanto, haciendo un:


REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "nombre" /d "pepe" /f


Ahora cierra la cmd. Vuelve a abrirla (aunque creo que es necesario reiniciar primero el sistema). Escribe:


echo.%nombre%


Y como ves, el nombre de "pepe" quedó guardado.

De todas formas, estoy seguro de que para cualquier cosa que pretendas hacer, habrá métodos más eficientes.

Voy a probarlo.... wait... xD




Edito:

Cita de: Binary_Death en 31 Julio 2012, 16:41 PM
Si te es necesario mantener el valor de una variable, siempre puedes guardarla como variable de entorno.

Vamos a ver, la ruta del registro es esta:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment


Ahí, como puedes ver, todos los valores son REG_SZ, por tanto, haciendo un:


REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "nombre" /d "pepe" /f


Ahora cierra la cmd. Vuelve a abrirla (aunque creo que es necesario reiniciar primero el sistema). Escribe:


echo.%nombre%


Y como ves, el nombre de "pepe" quedó guardado.

De todas formas, estoy seguro de que para cualquier cosa que pretendas hacer, habrá métodos más eficientes.


A ver:

Código (dos) [Seleccionar]
@echo off
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "s1" /d "Slot vacia"
echo %s1%
pause


Debería salir "Slot vacia" no? Pues no sale :C pero cuando intento volverlo a hacer me pregunta si quiero substituir el valor actual de "s1".

Que estoy haciendo mal?

Eleкtro









Danirs

Uuups lo puese aqui en vez del tema del virulator lo siento xD moverlo

Buenas!

Perdon por el doble post pero tengo una par de dudas acerca del gran trabajo del virulator.
Queria saber el orden de prioridades al ejecutar una tarea, si programo 10 cual se ejecuta primero? o se ejecutan todos a la vez? y si es asi como hago para ejecutarlas en el orden deseado? Creo que pido demasiado ;D Pero hacer lo que podais.

Y la ultima duda, que es eso del "efecto matrix" y "fake virus"

Gracias por la atencion y un gran trabajo.
Qué es la vida un frenesí. Qué es la vida una ilusión, una sombra, una ficción. Que todo en la vida es sueño y los sueños, sueños son.

Duning

#8
Cita de: EleKtro H@cker en 31 Julio 2012, 17:14 PM
saludos

Pues sí, había que reiniciar, entoces no me sirve ese método D:

Alguna forma que sirva en XP, Vista 7 (sin instalar aquello) y sin tener que reiniciar?

Luego,
Código (dos) [Seleccionar]
RD "%userprofile%\Escritorio\Meter_el_Jar_aqui"
Tengo que poner "Escritorio", no Desktop si no a mi no me funciona, y en Windows 7 funcionará?

Otro,
Código (dos) [Seleccionar]
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "s1" /d "Slot vacia"

Cada vez que quiero cambiarle el valor, me dice que ya existe, y me pregunta si quiero sobreescribirlo. ¿Como hago para que no lo pregunte, sino que directamete lo sobreescriba sin preguntar? (¿Sería con /Q ?)

Eleкtro

Cita de: Duning en 31 Julio 2012, 18:04 PMAlguna forma que sirva en XP, Vista 7 (sin instalar aquello) y sin tener que reiniciar?
Código (dos) [Seleccionar]
@Echo OFF
If Exist ".\data.tmp" (For /F "Tokens=*" %%@ in (data.tmp) do (Echo Bienvenido %%@))
Set /P Nombre=^>^>
Echo %NOMBRE%>"data.tmp"
Pause
Exit




Cita de: Duning en 31 Julio 2012, 18:04 PM
Código (dos) [Seleccionar]
RD "%userprofile%\Escritorio\Meter_el_Jar_aqui"
Tengo que poner "Escritorio", no Desktop si no a mi no me funciona, y en Windows 7 funcionará?
No, No funcionará.
Puedes hacer esto:
Código (dos) [Seleccionar]
RD "%userprofile%\Escritorio\Meter_el_Jar_aqui" 2>NUL || (RD "%userprofile%\desktop\Meter_el_Jar_aqui")



Cita de: Duning en 31 Julio 2012, 18:04 PM
Código (dos) [Seleccionar]
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v "s1" /d "Slot vacia"
¿Como hago para que no lo pregunte, sino que directamete lo sobreescriba sin preguntar?
(¿Sería con /Q ?)
Lee la ayuda del comando y lo sabrás, No ibas mal encamindado...

Reg /?

Saludos