jueves, 11 de marzo de 2010

TODO SOBRE EL COMANDO SET

COMANDO SET:
Muestra, establece o quita las variables de entorno de cmd.exe.SET [variable=[cadena]] variable Especifica el nombre de la variable de entorno. cadena Especifica una serie de caracteres que se asignará a la variable.Escriba SET sin parámetros para ver las variables de entorno actuales.Si las extensiones de comando están habilitadas, SET cambia así:"Cuando se llama al comando SET solamente con un nombre de variable, sin signo de igual ni valor, se mostrarán los valores de todas las variables cuyos prefijos coincidan con el nombre especificado como parámetro para el comando SET. Por ejemplo: SET Pmostrará todas las variables que empiecen con la letra 'P'El comando SET establecerá ERRORLEVEL en 1 si no se encuentra el nombre de la variable en el entorno actual.El comando SET no permitirá que un signo de igual sea parte de una variable.Se han agregado dos modificadores nuevos al comando SET: SET /A expression SET /P variable=[promptString]El modificador /A especifica que la cadena a la derecha del signo de iguales una expresión numérica que es evaluada. El evaluador de expresiones esbastante simple y es compatible con las siguientes operaciones, en orden deprecedencia decreciente: () - agrupar ! ~ - - operadores unarios * / % - operadores aritméticos + - - operadores aritméticos << >> - desplazamiento lógico & - bit a bit y ^ - bit a bit exclusivo o - bit a bit = *= /= %= += -= - asignación &= ^= = <<= >>= , - separador de expresiónSi se utiliza cualquiera de los operadores lógicos o de módulo, seránecesario escribir la cadena entre comillas. Cualquier cadena de la expresión que no sea numérica, se tratará como variable de entorno cuyo valor se convertirá a tipo numérico antes de utilizarse. Si se especifica una variable que no está definida en el entorno actual, se utilizará el valor cero. Esto permite hacer operaciones aritméticas con los valores de variables de entorno evitando el escribir todos estos signos % para obtener sus valores. Si se ejecuta el comando SET /A desde la línea del comando fuera de la secuencia decomandos, entonces se mostrará el valor final de la expresión. El operadorde asignación requiere un nombre de variable de entorno a la izquierda del operador de asignación. Los valores numéricos son números decimales, a no ser que lleven el prefijo 0x delante para los números hexadecimales, y 0 para los números octales. De esta manera 0x12 es lo mismo que 18, y lo mismo que 022. Nota: la notación octal puede ser confusa: 08 y 09 no son números válidos porque 8 y 9 no son dígitos octales válidos.El modificador /P permite establecer el valor de una variable para una líneade entrada escrita por el usuario. Muestra la cadena del símbolo del sistemaantes de leer la línea de entrada. La cadena del símbolo del sistema puedeestar vacía.La sustitución de variables de entorno ha sido mejorada así: %PATH:str1=str2%expandirá la variable de entorno PATH, sustituyendo cada repetición de"str1" en el resultado expandido con "str2". "str2" puede ser la cadenavacía para borrar efectivamente todas las repeticiones de "str1" de lasalida expandida. "str1" puede empezar con un asterisco, en cuyo caso,coincidirá con lo contenido en la salida expandida desde su inicio, hastala primera aparición del fragmento de str1 que queda.También puede especificar subcadenas para una expansión. %PATH:~10,5%expandirá la variable de entorno PATH, y usará sólo los 5 caracteresa partir del décimo primer carácter (desplazamiento 10) del resultadoexpandido. Si la longitud no se especifica, se utilizará el resto delvalor de la variable. Si algún número (desplazamiento o longitud) esnegativo, entonces el número usado es la longitud del valor de la variablede entorno añadido al desplazamiento o longitud especificados. %PATH:~-10%extraerá los 10 caracteres de la variable PATH. %PATH:~0,-2%extraerá todo menos los 2 últimos caracteres de la variable PATH.Finalmente, se ha añadido compatibilidad para la expansión de la variableretardada. Este soporte está siempre deshabilitado de forma predeterminada, pero puedehabilitarse o deshabilitarse a través del modificador de línea de comandos/V a CMD.EXE. Ver CMD /?La expansión de la variable de entorno es útil para tratar con laslimitaciones de la expansión actual, las cuales ocurren cuando una línea detexto es leída, y no cuando se ejecuta. El siguiente ejemplo demuestra elproblema con la expansión de la variable inmediata: set VAR=antes if "%VAR%" == "antes" ( set VAR=después if "%VAR%" == "después" @echo Si esto se puede ver, entonces significa que funcionó )dado que %VAR% se sustituye al mismo tiempo en ambas instrucciones IF cuando se lee la primera instrucción IF, pues incluye lógicamente al cuerpo del IF, el cual es una instrucción compuesta. De esta manera, IF, dentro de la instrucción compuesta está realmente comparando "antes" con "después" lo cuál nunca será igual. De un modo parecido, el siguiente ejemplo no funcionará como se espera: set LIST= for %i in (*) do set LIST=%LIST% %i echo %LIST%en esto NO generará una lista de archivos en el directorio actual, pero ensu lugar establecerá la variable LIST en el último archivo encontrado. Denuevo, esto ocurre porque %LIST% es expandido sólo una vez cuando laopción FOR es leída, y en ese momento la variable LIST variable está vacía.Así el ciclo actual FOR que se está ejecutando es: for %i in (*) do set LIST= %iel cual sólo mantiene el valor LIST hasta el último archivo encontrado.La expansión de la variable de entorno retardada permite utilizar uncarácter diferente (el signo de exclamación para expandir variables entiempo de ejecución. Si la expansión de la variable retardada estáhabilitada, los ejemplos se pueden escribir de la siguiente manera para que funcionen como es necesario: set VAR=antes if "%VAR%" == "antes" ( set VAR=después if "!VAR!" == "después" @echo Si esto se puede ver, entonces significa que funcionó ) set LIST= for %i en (*) do set LIST=!LIST! %i echo %LIST%Si las extensiones de comando están habilitadas, hay varias variablesdinámicas de entorno que pueden ser expandidas pero que no semuestran en la lista de variables que muestra ESTABLECER. Estos valores devariable se calculan dinámicamente cada vez que el valor de lavariable se expande.Si el usuario define una variable explícitamente con uno de estos nombres,entonces esa definición suplantará la variable dinámica abajo descrita:%CD% - se expande a la cadena del directorio actual .%DATE% - se expande a la fecha actual usando el mismo formato que el comando DATE.%TIME% - se expande a la hora actual usando el mismo formato que el comando TIME. %RANDOM% - se expande a un número decimal aleatorio entre 0 y 32767.%ERRORLEVEL% - se expande al valor de NIVEL DE ERROR actual%CMDEXTVERSION% - se expande al número actual de versión de las extensiones del comando del procesador.%CMDCMDLINE% - se expande a la línea de comando original que invocó el Procesador de comandos.C:\WINDOWS>HELP SETLOCALComienza la sección de cambios locales de entorno en un archivo por lotes. Los cambios de entornohechos después de que se haya emitido SETLOCAL son locales en el archivo por lotes.ENDLOCAL debe ser emitido para restaurar la configuración anterior. Cuando se llega al final deun archivo de secuencias de comandos por lotes, se ejecuta un ENDLOCAL implícito para cualquier comando SETLOCAL pendiente que se haya emitido para este archivo de secuencias de comandos por lotes.SETLOCALSi las extensiones de comandos están habilitadas SETLOCAL cambia así:Ahora el comando del archivo por lotes SETLOCAL acepta argumentos opcionales: ENABLEEXTENSIONS / DISABLEEXTENSIONSHabilitar o deshabilitar las extensiones del procesador de comandos. Ver CMD /? para más detallesENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION Habilita o deshabilita la expansión de la variable de entorno retardada. Ver SET /? para más detalles. Estas modificaciones duran hasta que coincida el comando ENDLOCAL, independientemente de su configuración anterior para el comando SETLOCAL.El comando SETLOCAL establecerá el valor ERRORLEVEL si se diera un argumento. Será cero si se da uno de los dos argumentos válidos y el otro no. Puede usar esto en los archivos de proceso por lotes para determinar si las extensiones están disponibles usando la siguiente técnica: VERIFY OTHER 2>null SETLOCAL ENABLEEXTENSIONS IF ERRORLEVEL 1 echo No puede activar las extensionesEsto funciona porque en las versiones anteriores de CMD.EXE, SETLOCAL no establecía el valor de ERRORLEVEL. El comando VERIFY con un argumento erróneo inicializa el valor ERRORLEVEL a un valor distinto de cero.C:\WINDOWS>HELP SHIFTCambia la posición de parámetros reemplazables en un archivo por lotes.SHIFT [/n]Si las extensiones de comando están habilitadas, el comando SHIFTadmitirá el modificador /n, el cual informa al comando que empiece acambiar en el argumento n, en donde n puede estar comprendido entre 0 y 8.Por ejemplo: SHIFT /2cambiará %3 a %2, %4 a %3, etc. y deja %0 y %1 sin modificar.

No hay comentarios:

Publicar un comentario