Buf, cuantas preguntas xD
Lo entenderás mejor con ejemplos...
no entiendo el uso del " ! "
Es para expandir una variable, "
!" es el equivalente a "
%", pero cuando se expande hay que usar "
!".
tampoco el ~
Sirve para realizar operaciones en las variables, como por ejemplo acortar los caracteres, o reemplazar caracteres.
REM Lo que he hecho es que solo muestre los 3 primeros caracteres (abc)
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 /ASirve 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.
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:
If defined TEMP
(Echo la carpeta temporal de tu sistema es
%TEMP%)
pushd
Esto no se explicarlo muy bien xD
Hace 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í.
PUSHD "C:\program files\"
echo Estoy trabajando en "
%CD%"
echo Ahora stoy trabajando en "
%CD%"
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.
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:
)
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:
)
:func
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 :/.
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 2ctfmon.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:
! REG.EXE VERSION 3.0
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVe
ctfmon.exe REG_SZ C:\WINDOWS\system32\ctfmon.exe
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.