Batch para buscar una cadena de Registro y si no está, crearla

Nuevamente por aca con mis dudas. Te cuento seguro le encuentras la vuelta al asunto.

Resulta que con cada formateo en mi trabajo existen cadenas de Registro que dependiendo de la versión del sistema, están o no. Y me preguntaba si se puede crear un .bat para poder buscar en determinado lugar del Registro de Windows una cadena, y si está omitir la creación de la misma o si no está crearla.

Dejo un ejemplo del comando que uso para crearla manualmente

REG ADD "HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System" /v "LocalAccountTokenFilterPolicy" /t REG_DWORD /d 1 /F

Lugar del registro:
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System

El Valor a crear:

LocalAccountTokenFilterPolicy

Tipo de Valor:

DWORD (32 bits)

Información del valor:

1

Tuve que pone espacios porque la web no me permite demasiadas palabras consecutivas.

1 respuesta

Respuesta
1

No tengo mucha experiencia en manejo del registro de Windows desde entorno MSDOS. ¿Te da problemas el crear una clave que ya existe? ¿Qué tal si la borras con REG DELETE antes de crearla?

Si insistes en comprobar si existe la clave puedes usar REG QUERY. Este sería un ejemplo:

@echo off
set rama=HKLM\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
set clave=Path
reg query %rama% /v %clave% > nul &&echo la clave %rama% %clave% existe||echo la clave %rama% %clave% no existe

Estoy trabajando sobre XP y la clave Path existe en la rama indicada. En tu caso puedes poner la que te interese y, lógicamente, la acción puede ser un GOTO en vez del ECHO que he puesto en el ejemplo.

Genial, estoy logrando la consulta de manera exitosa, pero quise cambiar algunas cosas y no logro por desconocimiento. Cómo hago para que en lugar de que me muestre que no existe, la cree a la clave y recién me diga "la clave no estaba pero fue creada" ¿como hago?

Por eso te decía lo del GOTO en lugar del ECHO. Mi idea sería algo así:

@echo off
set rama=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
set clave=LocalAccountTokenFilterPolicy
reg query %rama% /v %clave% > nul 2>&1 &&goto :existe||goto :noexiste
:existe
echo La clave %rama% %clave% ya existe y por tanto no se va a crear
goto :eof
:noexiste
echo La clave %rama% %clave% no existe y se va a proceder a crearla
reg add %rama% /v %clave% /t REG_DWORD /d 1 /F
goto :eof

No respondo de que el REG ADD funcione, eso ya es cosa tuya.

¡Gracias! Para windows 10 funciona correctamente. Una consulta fuera de lugar con respecto al tema ¿qué lenguaje tengo que estudiar desde cero para llegar a tener este tipo de conocimiento? ¿Alguna recomendación que me puedas dar? Muchísimas gracias

Me alegro de que funcione correctamente.

Respecto a tu otra "consulta" podría usar ese dicho tan extendido en muchas áreas, con tintes irónicos a veces y otras directamente jocosos, de que respecto a los lenguajes de programación hay dos tipos de personas: los que sintonizan espontáneamente con los lenguajes y los que no lo hacen. Imagino que cualquier persona interesada en ellos pertenece al primer grupo, pero no está asegurado. Yo creo que estoy en el primer grupo y lo que voy a decir debe interpretarse en consecuencia.

A grandes rasgos todos los lenguajes de programación son idénticos. Utilizan las tres "estructuras" de programación básicas:

  1. Secuencial (instrucciones que se ejecutan en el orden en el que están escritas)
  2. Alternativa (con grupos de instrucciones que se ejecutan o no una sola vez dependiendo de una condición lógica). Es el caso de los IF y de los CASE
  3. Repetitiva (grupos de instrucciones que se ejecutan un número de veces dependiendo de una condición lógica). Es el caso de los FOR o de los DO WHILE, DO UNTIL, etc.

Desde este punto de vista no hay más razones para elegir un lenguaje u otro que lo cómodo que se sienta uno con él o alguna otra no relacionada con la propia programación (como la facilidad para acceder al "bajo nivel" de las máquinas, el tamaño del código ejecutable, la existencia de buenos tutoriales o foros de ayuda, que esté o no "de moda", etc.)

Pero en los últimos tiempos (no tan últimos, hablo tal vez de 20 años) hay una nueva forma de estructurar los programas, lo que se suele llamar un paradigma, que ha cambiado radicalmente esa forma de estructurarlos. Se trata de la programación orientada a objetos. Pero como a día de hoy creo que se ha "adueñado del mercado" no vale la pena hablar de las formas antiguas de estructurar los programas. En todo caso, por supuesto, las que llamé más arriba "estructuras básicas" también están presentes en las variantes orientadas a objetos.

En resumen, el lenguaje de programación que elijas no es propiamente, el que te va a dar este "tipo de conocimiento" aunque sí la experiencia con esas estructuras básicas que podrás intentar aplicar a este "lenguaje" básico que es el de MSDOS (más propiamente el de la shell MSDOS de Windows). Si quieres estudiar un lenguaje "de alto nivel" yo te recomendaría (y seguramente ya estoy un poco "pasado de moda"), java o python, pero cada uno tiene su propio "mercado". A mí me gusta especialmente el C, con sus variantes C++ y C#, pero también he hecho cosas en Clipper, java y ensambladores.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas