Bien, un pequeño post me hizo pensar un momento en como usar un if exist con claves del registro.
Para quien no sepa lo que es un if exist, es muy sencillo. If es un comando de comparación, como bien ya saben, y puede usarse con exist, que traducido al ingles:
if exist = si existe (condicional);
Este formato se usa para realizar una accion en condicion de que un archivo exista:
@echo off
if exist c:\archivo.txt (goto :si) else (goto :no)
:si
echo Existe
pause > nul
exit
:no
echo No existe
pause > nul
exit
Como ven, esto mirará si existe el archivo: archivo.txt que esta en la unidad c:\ y si es así, que lo escriba en pantalla, de lo contrario, indicara por pantalla que dicho archivo no existe.
Un code muy simple, pero también muy usado y bastante útil.
Bien, una vez sabemos para que sirve este comando y queremos saber mas de el, profundizaremos en el registro de windows: como hacer una accion en función de que exista o no un valor del registro.
Esto, puede parecer sencillo: if exist HKLM\... pero por desgracia no es así, no hay ningun parámetro para indicar que usamos una ruta del registro ni nada... Por lo que tendremos que usar otros métodos más avanzados a nuestro alcanze...
Usaremos comandos algo avanzados, pero les servirá a los newbies para empezar a verse con ellos y a usarlos... Como son el
find y el
for.
La idea que se nos puede ocurrir es el hecho de escribir en un .txt todos los valores de la clave en que se quiera saber si existe un valor o no; con el comando find buscar el valor, y con el for, conseguir saber si se encontro o no ese valor.
Parece un poco lioso al principio, no te procupes tronco, ahora lo arreglamos

:
1- Dirígete al registro de windows: inicio - ejecutar > regedit
Vamos a explicar este tutorial con el ejemplo de que si existe el valor "MIBAT" en la carpeta Run, y si existe, que haga referencia de ello, sino, que lo indique por pantalla.
2- Dirígete a: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\
Muy bien, aquí se muestran todos los valores que se inician con el ordenador en arrancar windows. Si pones un virus aquí, se iniciara siempre cuando enciendas el pc y se arranque windows

Muy bien, vamos a ello:
3- Crea un valor llamado "MIBAT" (click derecho - nuevo - valor alfanumérico).
4- Llamalo MIBAT.

Bien, minimiza la ventana, abre el bloc de notas que empezamos a programar!!!

- Tenemos que crear un .txt donde esten reflejados los valores y datos de la clave del registro Run y despues crear otro .txt donde queden reflejados los resultados de la busqueda de un valor. Con el comando for, veremos si ese valor existe o no.
- Empecemos a escribir code:
@echo off
REG EXPORT "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" c:\archivo.txt- Con este fragmento, creamos un txt en c:\ llamado archivo, donde se veran reflejadas todos los valores y datos de Run. Pero bórrenlo, vamos a perfeccionar nuestro programa.
- Ahora tenemos que buscar la clave que el user desee ver que existe, para ello usamos los comandos set, if, y find; remodelamos el orden del code y queda algo así:
:main
@echo off
set /p op=Valor a bsucar en carpeta del registro Run: -
if "%op%"=="" (goto :main)
set op=%op: =_%
goto export- Bien, con la segunda linea del code, pedimos al user que escriba el valor a buscar en Run. En la tercera linea, miramos si lo que ha escrito es nulo (si simplemente presionó enter) y si es asi, volvera a main y nuna se saldra del programa. En la cuarta linea, hacemos que en la misma variable, todos los espacios que el user escriva, sean "_" porque sino la cmd no lee espacios y se sale del programa. Finalmente, nos dirigimos a export.
- Demomento tenemos nuestro programa en el que se pide al user el valor que quiere buscar en Run. Ahora empieza lo complicado, buscar el valor, e indicar si existe o no dicho valor:
:main
@echo off
set /p op=Valor a bsucar en carpeta del registro Run: -
if "%op%"=="" (goto :main)
set op=%op: =_%
goto export
:export
REG EXPORT "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" c:\archivo.txt- Bien, vamos a realizar la busqueda del valor que el user quiera buscar y los resultados de la búsqueda los dejaremos en otro .txt. Supongamos que el user que usa el programa sois vosotros mismos, y quereis buscar el valor MIBAT...

:main
@echo off
set /p op=Valor a bsucar en carpeta del registro Run: -
if "%op%"=="" (goto :main)
set op=%op: =_%
goto export
:export
REG EXPORT "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" c:\archivo.txt
goto busqueda
:busqueda
find /i "%op%" c:\archivo.txt >c:\resultados.txt
- Bien, con esto buscamos lo que el user escribió en la lista de valores de Run que exportamos y estan en archivo.txt. Los resultados de la busqueda se encuentran en c:\ en un archivo .txt llamado "resultados".
- Los archivos.txt que tienen los resultados de busquedas tienen este formato:
------------ ARCHIVODONDESEHABUSCADO :1/0
- Si tiene escrito un 1 es que encontro lo que se estaba buscando, lo que significa que el valor que el user queria saber si existia existe. Si hubiese un 0, quiere decir que en buscar el valor que el user queria buscar, no lo ha enocntrado en la lista de valores de Run, por lo que no existe...
- Como damos referencia de ello? Muy sencillo, usando el comando for...
- No se asusten, es un comando avanzado y algo complicado y mas, si leieron lo que nos dice la cmd de este comando que nos confunde a todos... Pero bueno, vamos a hacerlo

Tenems que buscar la tercera palabra del archivo donde se encuentran los resultados de la busqueda. Porque la tercera palabra? por el 0 o el 1, es la palabra o cadena de carácteres que nos indica si ha enocntrado o no el valor.
---------------- = 1
ARCHIVODONDESEHABUSCADO = 2
1 / 0 = 3Por eso haremos un for que busque en el archivo "c:\resultados.txt" la tercera palabra y cree una variable con el contenido de la tercera palabra...
El .programa quedaría así:
:main
@echo off
set /p op=Valor a bsucar en carpeta del registro Run: -
if "%op%"=="" (goto :main)
set op=%op: =_%
goto export
:export
REG EXPORT "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" c:\archivo.txt
goto busqueda
:busqueda
find /i "%op%" c:\archivo.txt >c:\resultados.txt
goto final
:final
for f "tokens=3 delims= " %%a in (c:\resultados.txt) do set res=%%a- Con este for, cojeremos la tercera palabra (delimitada por un espacio en blanco) y crearemos una variable con el contenido de esta palabra (que puede ser 1 o 0).
- Ahora con una simple comparación, podemos saber si existe o no

:P
:main
@echo off
set /p op=Valor a bsucar en carpeta del registro Run: -
if "%op%"=="" (goto :main)
set op=%op: =_%
goto export
:export
REG EXPORT "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" c:\archivo.txt
goto busqueda
:busqueda
find /i "%op%" c:\archivo.txt >c:\resultados.txt
goto final
:final
for f "tokens=3 delims= " %%a in (c:\resultados.txt) do set res=%%a
goto compare
:compare
if %res%==1 (goto :si) else (goto :no)
:si
echo Existe
pause > nul
exit
:no
echo No existe
pause > nul
exit
- El code es bastante sencillo, simplemente hay que tener imaginación y ganas de hacer las cosas bien para conseguir entenderlo

- Con las ultima slinea comparamos si la variable que creamos con el for es un 1 o un 0, y indicar la circunstancia por cada una de las opciones...
Espero que se haya entendido, aunque es un poco dificil de explicar :S Cualquier duda, en este topic

Bytes, Espectro Infernal.