Título: [BATCH] Script para ver archivos que se ejecutan al inicio Publicado por: Davidmatias321 en 18 Diciembre 2011, 22:17 pm Hola que tal, estaba haciendo un script en batch para que me muestre los archivos que se ejecutan al inicio de la sesion, y pueda agregar o borrar los existentes, adjunto el codigo y al final digo el problema:
Código: @echo off Mi duda tornaba en que, cuando lo abro me tira lo siguiente: Citar ! REG.EXE VERSION 3.0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentV NvCplDaemon REG_SZ RUNDLL32.EXE C:\WINDOWS\system NvMediaCenter REG_SZ RunDLL32.exe NvMCTray. nod32kui REG_SZ "C:\Archivos de programa\Eset\ SunJavaUpdateSched REG_SZ "C:\Archivos de progra ava Update\jusched.exe" ! REG.EXE VERSION 3.0 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVe ctfmon.exe REG_SZ C:\WINDOWS\system32\ctfmon.exe Borrar clave? (D) Agregar nueva clave? (A) Salir? (S) Hay alguna forma o en su defecto alguna clave de registro para que me quede todo enterito, onda los archivos en si sin el "! REG.EXE VERSION 3.0..." y su clave (Para que quede todo junto y sea mas facil de detectar los archivos) Asi me gustaria que quede con la "modificacion": Citar Claves disponibles: NvCplDaemon REG_SZ RUNDLL32.EXE C:\WINDOWS\system NvMediaCenter REG_SZ RunDLL32.exe NvMCTray. nod32kui REG_SZ "C:\Archivos de programa\Eset\ SunJavaUpdateSched REG_SZ "C:\Archivos de progra ava Update\jusched.exe" ctfmon.exe REG_SZ C:\WINDOWS\system32\ctfmon.exe Borrar clave? (D) Agregar nueva clave? (A) Salir? (S) Se me habia ocurrido preguntar si hay alguna clave para sacar de la pantalla las palabras que estorban, pero no encontre. Quizas ustedes me puedan dar la solucion a mi problema. Saludos !! Título: Re: [BATCH] Script para ver archivos que se ejecutan al inicio Publicado por: Eleкtro en 19 Diciembre 2011, 06:23 am Hay alguna forma o en su defecto alguna clave de registro para que me quede todo enterito, onda los archivos en si sin el "! REG.EXE VERSION 3.0..." y su clave (Para que quede todo junto y sea mas facil de detectar los archivos) Se me habia ocurrido preguntar si hay alguna clave para sacar de la pantalla las palabras que estorban, pero no encontre. Quizas ustedes me puedan dar la solucion a mi problema. Saludos !! Para eso necesitas crear un FOR y "delimitar" las palabras que no quieres que salgan, etc... Aqui tienes mi modificación, lo he mejorado bastante para que no puedan suceder errores :rolleyes:. Modificalo a tu gusto :) Espero que te sirva... Si no entiendes algo, pregunta! Un saludo. EDITO: Aviso para el mod Leo, no puedo ponerle la etiqueta correcta al code porque se transforman carácteres en código PHP o algo raro, sorry. (http://img12.imageshack.us/img12/9638/prtscrcapture4t.jpg) (http://img803.imageshack.us/img803/2697/prtscrcapture5.jpg) Código: @Echo Off Título: Re: [BATCH] Script para ver archivos que se ejecutan al inicio Publicado por: Davidmatias321 en 19 Diciembre 2011, 19:02 pm Excelente, gracias por responder, se ve bastante completo...
no entendi estas lineas: Código: For /F "tokens=1,2 delims=_ skip=2" %%a in ('reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Run') do ( 1)no entiendo el uso del " ! " y tampoco el ~ como tampoco porque pusiste " Set/a num+=1 2)tampoco entiendo el uso del if defined 3) me explicas vos que significa : Código: For /F "tokens=1,2 delims=_ skip=2" %%a in ('reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run') do ( 4) el pushd y el setlocal para que son? (a todo esto estuve investigando y las cosas que se me dificultaron entender o ni encontre son estas) espero que me puedas ayudar gracias igual ! Título: Re: [BATCH] Script para ver archivos que se ejecutan al inicio Publicado por: Eleкtro en 19 Diciembre 2011, 20:22 pm Buf, cuantas preguntas xD
Lo entenderás mejor con ejemplos... Cita de: Davidmatias321 no entiendo el uso del " ! " Es para expandir una variable, "!" es el equivalente a "%", pero cuando se expande hay que usar "!".Cita de: Davidmatias321 tampoco el ~ Sirve para realizar operaciones en las variables, como por ejemplo acortar los caracteres, o reemplazar caracteres.Código Cita de: Davidmatias321 porque pusiste Set/a num+=1 Si te fijas en las imagenes que posteé del code, las entradas de la lista están ordenadas por números no?Set /A Sirve para realizar operaciones matemáticas, en este caso lo que hago es SUMAR. (+=) Lo único que hago en el code es aumentar el número de tal forma: 0,1,2,3,4,5,6,7,8,9,10...etc. Para que haya un orden en las entradas de la lista. Además, esa variable también la utilizo para indicar la clave que se desea borrar (En vez de escribir el nombre entero como en tu code original) me pareció más práctico xD. Cita de: Davidmatias321 tampoco entiendo el uso del if defined Supongo que sabes usar "If not exist"... se usa solamente para comprobar archivos verdad?, Pues para que te hagas una idea la función de "defined" es la misma solo que se usa para comprobar variables, ejemplo:Código
Cita de: Davidmatias321 pushd Esto no se explicarlo muy bien xDHace lo mismo que el comando "CD", pero la taréa se agiliza mucho más cuando usas PUSHD, porque luego puedes usar el comando POPD para retroceder a la carpeta de trabajo original Ejemplo: Supongamos que tienes este Código.bat en la carpeta C:\Windows\system32, y ejecutas el archivo desde allí. Código PD: Por cierto, aunque parezca una tontería, en el code que te modifiqué resulta necesario trabajar desde "C:\windows\system32\" debido a la expansión, sino, daba error porque no encontraba el programa "Reg.exe" ni el "Mode.com", Por eso lo usé, Aunque podría haber puesto "CD %WINDIR%\system32" xD jeje. Cita de: Davidmatias321 el setlocal para que son? Setlocal se puede usar de varias maneras, en este caso "Setlocal enabledelayedexpansion" sirve para habilitar la expansión de variable y poder usar el signo "!" en las variables. A veces resulta necesario hacer esto para que un code funcione, por ejemplo cuando creas una variable dentro de un FOR, y quieres usar esa variable sin salir del FOR, sin salir me refiero a esto: Código
Ese code no funciona, porque no se ha expandido la variable "Archivo". Aunque por otro lado, SIEMPRE se puede evitar la expansión (Set local enabledelayedexpansion) haciendo CALLS, pero eso es liar bastante el código, no me parece una buena costumbre hacer calls para algo básico, bueno te pongo un ejemplo: Código Conviene no usar setlocal enabledelayedexpansion si en tu code trabajas con archivos que tengan caracteres especiales en el nombre como "!" ya que con el setlocal habilitado... no se leerán bien. Así que si tienes que engorronar el code con "Calls", mejor hacerlo, se evitaran muchos errores, de echo debí haberlo echo :/. Cita de: Davidmatias321 For /F "tokens=1,2 delims=_ skip=2" %%a in ('reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run') do ( Los tokens es la cantidad de cadenas, partes, Strings, o como quieras llamarlo en las que quiero que se separen los datos, en este caso quiero que se separe en 2 partes (1,2), una contiene el nombre de la clave (%%a) y el otro token contiene la ruta de la clave (%%b) Delims son los caracteres para delimitar las cadenas, osea, Despues de indicar los tokens, hay que indicar el patrón por donde se deben partir esas partes, y yo le indiqué que corte las partes en 2 trozos (Tokens) separandolas desde el signo "_". A ver si así lo entiendes: Esto es el token 1 Y esto el token 2 ctfmon.exe REG _SZ C:\WINDOWS\system32\ctfmon.exe Y luego con los comandos de operaciones en las variables que te expliqué al principio, se hace el resto :). Skip son las lineas que se deben saltar de los datos obtenidos... Me explico, si los datos fuesen estos: Código: ! REG.EXE VERSION 3.0 Esto es lo que haria ese FOR si pusieramos "Skip=4": Linea 1: ! REG.EXE VERSION 3.0 Linea 2: Linea 3: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVe Linea 4: Linea 5: (EN ESTA LINEA EMPIEZA A TRABAJAR EL FOR, crear los tokens, separarlos, mostrarlos, etc...)ctfmon.exe REG_SZ C:\WINDOWS\system32\ctfmon.exe Bueno, menuda parrafada me he escrito xDDDDDDDDDDDD Si no te lo lees todo, lo entenderé xDDD Venga, a ver si aprendes un poco con algo de lo que he dicho :) Saludos. Título: Re: [BATCH] Script para ver archivos que se ejecutan al inicio Publicado por: Davidmatias321 en 21 Diciembre 2011, 03:27 am Sarpadooo... aprendi bastante!
Que genio que sos man, gracias por eso. Pero si no te jode seguramente me podes aclarar la duda del reverendo " ! " No entendi la explicacion de expandir. Vos te referis a cuando tengo que meter mas de una linea por ejemplo Código: if %errorlevel%==1 goto ( (Disculpa si lo hice mal, nomas que recien entro a hacer programacion avanzada de batch, hasta el momento ando con boludeces nomas jaja ahora espero que se venga lo interesante) Espero que me puedas despejar la duda gracias maestro! Título: Re: [BATCH] Script para ver archivos que se ejecutan al inicio Publicado por: Eleкtro en 21 Diciembre 2011, 06:00 am me podes aclarar la duda del reverendo " ! " No entendi la explicacion de expandir. Vos te referis a cuando tengo que meter mas de una linea por ejemplo Código: if %errorlevel%==1 goto ( Ese ejemplo que pusiste no, pero más o menos (No se usa sobre comandos, se usa sobre variables): 1er code: Código 2do code: Código El primer code no funciona, el segundo si, porque he activado la expansión (Setlocal) y he usado los " ! ". Código: SETLOCAL /? Lo siento pero ni yo ni la ayuda del comando saben explicarse mejor xDDD Saludos. Título: Re: [BATCH] Script para ver archivos que se ejecutan al inicio Publicado por: Davidmatias321 en 21 Diciembre 2011, 22:25 pm Ya esta, entendi. gracias.
Me imagino que el && y el & son para poner mas de una instruccion en una linea o no? suerte y muchisimas gracias! Título: Re: [BATCH] Script para ver archivos que se ejecutan al inicio Publicado por: Eleкtro en 22 Diciembre 2011, 05:12 am Ya esta, entendi. gracias. Me imagino que el && y el & son para poner mas de una instruccion en una linea o no? suerte y muchisimas gracias! El "&" si, el comando con un "&&" solo se ejecuta si el anterior se ha ejecutado correctamente. Ejemplo: Código (El primer comando da error, así que el pause no se ejecuta :P) Ahora si, creo que ya te ha quedado todo claro xD Título: Re: [BATCH] Script para ver archivos que se ejecutan al inicio Publicado por: Davidmatias321 en 23 Diciembre 2011, 01:54 am Excelente !
Cada vez entiendo mas de esto, espero que se venga lo interesante. Le encontre un error al codigo y es que cuando suponete que agrego una clave y la quiero borrar (estando esta clave en HKCU), como esta no está en HKLM, me tira error que no lo encontro ahi, y luego en la siguiente linea me pone que se borro. Ahora estoy viendo como implementar un for para cuando el %errorlevel% del primer reg delete sea "1", que borre el resultado de la pantalla "Error, clave no encontrada". Estaba pensando en esto pero no funciona: Código: echo Ingresar clave que se desea borrar Pero me lo tira igual, me sigo fijando... ahi pense que poniendole skip=1 me saltaria la primer linea (la del error) y seguiria y lo que haga lo mande a un echo>nul para que eso "supuestamente" no salga en pantalla, pero veo que no salio, que decis al respecto? Título: Re: [BATCH] Script para ver archivos que se ejecutan al inicio Publicado por: Eleкtro en 23 Diciembre 2011, 10:25 am No es exactamente un error, lo que andas buscando es esto:
Código Usalo así, sin bucles ni nada. Como ves, es muy sencilla la solución... Solo había que ocultar la salida del "error"... Eso podrías haberlo aprendido en un manual básico (Es una sugerencia):P Citar Estaba pensando en esto pero no funciona: Código: echo Ingresar clave que se desea borrar Pero me lo tira igual, me sigo fijando... Esa comprobación de errores no te habría servido nunca, porque primero estás ejecutando el comando del reg delete, así que el error te lo va a mostrar hagas lo que hagas. y luego lo estás volviendo a ejecutar xD Saludos. |