Últimos mensajes - Powered by IBM
- Orientación de página
- error al intentar unirse al dominio
- Botones de acceso rapido en un teclado
- PROBLEMAS PARA CONFIGURAR IMPRESORA
- Crear mensaje de inicio en bacth
- Problema con cartel "Suspender Apagar Reiniciar"
- Error al encender laptop Pantalla Azul
- sesion lenta entre xp y winServer2008
- mensaje antes de responder un correo por xchange ...
- problemas con Z:
Palabras claves
[Curso - Parte 1] Lenguage de comandos JEJEJEJE
19/08/2006 - 18:28 por deabru | Informe spam
Vaya MIERDAaaaaaaaaaaaaaaaaaa
Existen 10.000 tutoriales mejores en internet, ademas nunca podrá ser
como el de Linux o *nix jajaja
Por la puerta de atras tella, ¿te ha gustado? jur jur jur
Comidita pa el SPAM jijijiji
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
Exponer en: general
Tema de conversación: [Curso - Parte 1] Lenguage de comandos
(scripts)
De: jmt [jmtella] Expuesto el: vie 18/08/2006 13:32
Asunto: [Curso - Parte 1] Lenguage de comandos (scripts)
Datos adjuntos:
Ver como página Web
La idea es que participeis todos: preguntas y dudas. De esta manera me
ayudais a corregir el texto de cara a la version final.
LENGUAJE DE COMANDOS - SCRIPTS .CMD . BAT
¿que es un script en lenguaje de comandos?: No es nada mas que un
fichero de
texto, que puede generarse con el simple cuaderno de
notas, y cuya extension es .bat o .cmd. Su contenido son los comandos
que
ejecutariamos en una consola de comandos (cmd) y cuyo
fin es evitar las tareas repetitivas que podriameos realizar en una
consola
de comandos.
Aunque esta es la definición clasica, no debemos perder de vista que
desde
una consola de comandos podemos realizar, mediante
comandos, practicamente todo lo que la imaginacion nos permita. Todo
lo que
se configura, o las tareas de mantenimiento que
realizamos en windows se pueden hacer desde una consola de comandos.
Igualmente existen muchos comandos que son solo de consola.
Revisemos un poco la tipologia de los comandos: un comando es "algo"
que o
bien entiende directamente el shell (el interprete de
comandos, en este caso el cmd.exe) o bien es un programa con extension
.com
o .exe -o incluso un visual basic- que no use la
interfaz grafica y que por tanto esté orientado a la consola. Un
ejemplo
clasico es el programa ipconfig. Este programa (de
consola) nos da la configuracion TCP/IP de la maquina. O bien el ping.
ENTORNO DE UN PROGRAMA.
Todos los sistemas operativos, y windows no es una excpecion, tienen
un area
de datos llamada "entorno". No es nada mas que un
area donde se guardan ciertas variables con su contenido.
Es importante entender que cada programa de windows tiene su entorno
(igual
o diferente o otro programa). Los entornos se heredan.
Es decir, cada programa (y el propio interprete de comandos, cmd.exe,
no es
una excpecion) cuando se lanza, "hereda" dicho
entorno. Por heredar, no quiere decir que "use" el mismo que el
programa
padre, sino que al lanzarse, el "loader" del sistema
operativo lo que realiza es una copia del entorno padre en una nueva
area de
datos y al lanzar el programa le da como direccion
del area de entorno esa nueva copia del entrono del "padre".
Es decir, cualquier modificacion en las variables de entorno dentro de
un
programa no afecta al sistema ni al resto de programas,
ya que lo que haría es modificar su propio entorno: la copia del
entorno
original del programa padre.
El sistema operativo al cargarse predefine ya una serie de variables
de
entorno. Podemos verlas, bien con boton derecho en Mi PC,
propiedades, pestaña de opciones avanzadas y boton de variables de
entorno,
o bien de una manera mas simple, lanzando el
interprete de comandos (cmd.exe) y tecleando el comando "set" (sin
comillas).
NOTA: Realmente, aunque lo veamos en conjunto, existen dos entornos:
uno del
sistema y uno de usuario, pero la vision de ambos es
en conjunto.
Acabamos de ver nuestro primer comando: "set". Este comando nos
permite no
solo ver todas las variables, sino tambien definir /
cambiar / borrar su contenido y algunas opciones mas.
Si lo ejecutamos por consola, nos dará al similar a:
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\mi usuario\Datos de programa
CommonProgramFiles=C:\Archivos de programa\Archivos comunes
COMPUTERNAME=MIMAQUINA
ComSpec=C:\WINDOWS\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Documents and Settings\mi usuario
NUMBER_OF_PROCESSORS=1
OS=Windows_NT
Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;.etc
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 7 Stepping 3, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION03
ProgramFiles=C:\Archivos de programa
...etc
Fijemonos que la estructura es: nombre de variable=contenido de la
variable
Las variables, dentro de una consola de comandos o bien dentro de un
script
se referencian para poder ver su contenido, encerradas
entre simbolos de %. Por ejemplo, en el caso anterior, para ver el
conetido
de la variable COMPUTERNAME, simplemente podemos
ejecutar:
echo %COMPUTERNAME%
esto nos dará como resultado:
MIMAQUINA
Igualmente podriamos cambiarlo con el comando set citado
anteriormente:
set COMPUTERNAME=nuevoNOMBRE
Pero...
* ¿esto realmente tiene el efecto de cambiar el nomnbre del
ordenador?. Por
supuesto que no. Esto solo cambia el contenido de
dicha variable. ¿donde lo cambia?: pues tal y como hemos comentado
anteriormente, lo cambia en el entorno del programa, es decir
en la copia del entorno original heredado por el programa. En nuestro
caso,
al ejecutarlo desde un cmd.exe, implica que cambia el
entorno del cmd.exe (y solo de él, es decir si tuviesemos lanzadas dos
consolas de comandos, cada una de ellas con cmd.exe, solo
se cambiará en el cmd.exe que hayamos ejecutado ese comando "set"). Y
¿para
que puede servir?: simple, si recordamos que un
programa hereda una copia del entorno del programa que lo lance, esto
implicará que todo lo que lancemos desde esa consola de
comandos, tendrá el contenido de esa variable modificado.
* ¿como podemos crear una nueva variable de entorno?: tan simple como
darle
un nombre y asignarle su contenido. Es decir:
set nuevo=prueba
esto creará, si no esxite, o modificará el contenido si existiese, de
una
variable de entorno llamada "nuevo", y le asignará el
contenido de "prueba".
* ¿podemos asignar a una variable el contenido de otra?: si por
supuesto.
Simplemente recordando que el contenido de una variable
es precisamente el nombre de la variable encerrada entre simbolos %.
Es
decir:
set otra=%nuevo%
esto creará la variable "otra" con el contenido de la variable
"nuevo", el
cual era el texto "prueba". Es decit si despues de
ejecutar el comando anterior, ejecutamos:
echo %otra%
su resultado será:
prueba
* ¿como podemos borrar -eliminar- una variable?. Simplemente no
asignando
nada. Es decir:
set otra
esto borrará la variable. Si ahora damos el comando "set" que nos
muestra
todas las variables, la variable "otra" ya no aparecerá.
* ¿puedo concatenra textos con variables en una asignacion?: Si, por
supuesto. Por ejemplo:
set otra_de_neuevo=Esto es una %nuevo% de concatenacion
El resultado de lo anterior será que la variable "otra_de_nuevo"
contendrá
el valor "Esto es una prueba de concatencion".
* ¿podemos tener contenidos numericos y no solo alfabeticos y por
tanto
realizar operaciones matematicas con el comando set?. Si,
se puede. La manera es con el modificador /a. Pongamos un ejemplo:
set n#4 (asignar 234 a la variable "n")
set /a i=%n%/4
veremos que esto nos devuelve por pantalla el valor 58 (es decir la
division
de 234/4) y ademas se lo asigna a la variable "i").
Es necesario el modificador /a, ya que si no lo hubiesemos puesto,
entonces
la expresion:
set i=%n%/4
no hubiese realizado la operacion matematica y se hubiese quedado con
el
contenido (como literal) de:
234/4
es decir una cadena de caracteres con ese contenido y no con el
resultado
matematico de la divison.
Fijemonos, por curiosida en este ultimo caso y se puede ir realizando
una
prueba en una consola de comandos.
Realicemos:
set n#4
set i=%n%/4
echo %i%
vermos entonces:
234/4
si ahora realizamos:
set /a j=%i%
¿que contendrá?. ¿contendrá el literal de texto "234/4"? ¿o solo "234"
ya
que el caracter "/" no es numerico? ¿o contendrá "58"?
Realizarlo como prueba :-)
La asignacion a una varialbe numerica, puede ser, decimal, o bien
hexadecimal o bien octal.
Es decir, podemos hacer:
set /a i
set /a i=0x0E
en ambos casos contendrá el decimal 14 .recordemos que el hexadecimal
0E
equivale al decimal 14).
O bien, si queremos introducir un numero en octal, simplemente lo
empezamos
por cero.
set /a i1
hay que tener cuidado con esto, ya que el octal 021 es el decimal 17.
Podeis
comprobarlo en pantalla simplemente tecleando la
linea anterior y viendo el resultado. Siempre los resultados nos los
expresará en decimal.
Esto puede ser util para convertir directamente de hexadecimal o bien
de
octal a decimal de una manera rapida.
* Ya que hemos empezado empezado con el comando "set" vamos a
finalizar todo
lo que dicho comando puede hacer. Ademas de lo
anterior:
set p
nos mostrará en pantalla "todas" las variables de entorno que empiecen
por
p. Y para finalizar el modificador /p. Es decir, una
sintaxis del estilo:
set /p variable=[literal]
lo que hace es muestra el "literal" en pantalla y el cursor se queda a
continuacion esperando que metamos un dato. Cuando lo
metemos y tecleamos intro, lo que hayamos tecleado se asignará a la
variable
de entorno definida en el set. Es decir, por ejemplo:
set /p dato=Introduce datos:
Nos mostrará por pantalla:
Introduce datos:_
Y cuando los metamos, los asignará a la variable "dato". Estoi es
válido
realizarlo en un script. En ese momento se detendrá la
ejecucion del script y nos pedirá datos por pantalla. Cuando los
introduzcamos y pulsemos la tecla intro, se los asignará a dicha
variable y continuará la ejecución del script.
CARACTERES ESPECIALES
Hay ciertos caracteres "especiales" que hay que usar con estremada
precaucion: por ejemplo, evitar usar, a no ser que lo
necesitemos expliticamente, caracteres reservados como &, >, <, |, %
Pongamos un ejemplo. El caracter & ("and" en inglés, es decir "y" en
castellano) se interpreta como un y, es decir, ejecutar lo
que hay antes del & y además a continuacion, ejecutar lo que hay
despues del
&. Es decir, si ejecutamos:
set var=a&a
nos dará un error que veremos por pantalla:
"a" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.
*¿que ha hecho el sistema?. Ha ejecutado el comando que hay antes del
&, es
decir:
set var=a
Por tanto le ha asignado a la variable de entorno "var" el contenido
"a". A
continuacion, intenta ejecutar lo que hay despues del
&, es decir intenta interpretar el comando "a". Como "a" no es un
comando
reconocido, ni un .exe, ni un .com, ni el nombre de otro
script nos dará el error mostrado anteriormente. Curiosamente:
set var=a&cmd
¿que hace?. Ejecutarlo y ver el resultado.
Pero...¿y si realmente queremos asignar el contenido del literal "a&a"
a la
variable "var", como lo hacemos?. Simplemente
anteponiendo el caracter ^ a cualquiera de los caracteres especiales.
Es
decir, en nuestro caso deberiamos haber hecho:
set var=a^&a
posteriormente un:
echo %var%
nos mostrará el contenido de lo que realmente deseabamos.
NOTA: Un error bastante corriente cuando se usan caracteres de
asignacion y
concatenacion (&) en la misma linea puede ser:
set var=prueba & ser var1=otra_prueba
¿cual es, o puede ser, el error cometido? pues...recordemos que todo
lo
anterior al & se ejecuta como un comando. Es decir ¿que
hemos asignado a la variable "var"?. Podemos suponer que "prueba".
Pero no
es así, hemos asignado todo lo anterior al &, es decir
"prueba " -con un espacio en blanco al final. Esto nos puede causar
problemas posteriores si lo que queriamos hacer era asignar
solo "prueba".
Podemos verificarlo tecleando:
echo *%var*
Es decir, que no muestre un *, el contenido de var y otro *. Esto nos
mostrará:
*prueba *
con el fatidico (en este caso) caracter en blanco al final.
jmt
deabru... bai deabrunaiz (ekiozuTEarrobadeabruELpuntoGcom fuera
mayusculas!)
EChM#5040 (7!)
KYI NOW!
Kawasaki ZX6R'98 ninja (green power!)
Vespa PX 200'89
VW Golf GTI MK2 8v'89
No a las patentes de software http://proinnova.hispalinux.es/
"Somos moteros, no víctimas de la moda" (c) Paul Carmichael
Existen 10.000 tutoriales mejores en internet, ademas nunca podrá ser
como el de Linux o *nix jajaja
Por la puerta de atras tella, ¿te ha gustado? jur jur jur
Comidita pa el SPAM jijijiji
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
ekiozu@deabru.com
Exponer en: general
Tema de conversación: [Curso - Parte 1] Lenguage de comandos
(scripts)
De: jmt [jmtella] Expuesto el: vie 18/08/2006 13:32
Asunto: [Curso - Parte 1] Lenguage de comandos (scripts)
Datos adjuntos:
Ver como página Web
La idea es que participeis todos: preguntas y dudas. De esta manera me
ayudais a corregir el texto de cara a la version final.
LENGUAJE DE COMANDOS - SCRIPTS .CMD . BAT
¿que es un script en lenguaje de comandos?: No es nada mas que un
fichero de
texto, que puede generarse con el simple cuaderno de
notas, y cuya extension es .bat o .cmd. Su contenido son los comandos
que
ejecutariamos en una consola de comandos (cmd) y cuyo
fin es evitar las tareas repetitivas que podriameos realizar en una
consola
de comandos.
Aunque esta es la definición clasica, no debemos perder de vista que
desde
una consola de comandos podemos realizar, mediante
comandos, practicamente todo lo que la imaginacion nos permita. Todo
lo que
se configura, o las tareas de mantenimiento que
realizamos en windows se pueden hacer desde una consola de comandos.
Igualmente existen muchos comandos que son solo de consola.
Revisemos un poco la tipologia de los comandos: un comando es "algo"
que o
bien entiende directamente el shell (el interprete de
comandos, en este caso el cmd.exe) o bien es un programa con extension
.com
o .exe -o incluso un visual basic- que no use la
interfaz grafica y que por tanto esté orientado a la consola. Un
ejemplo
clasico es el programa ipconfig. Este programa (de
consola) nos da la configuracion TCP/IP de la maquina. O bien el ping.
ENTORNO DE UN PROGRAMA.
Todos los sistemas operativos, y windows no es una excpecion, tienen
un area
de datos llamada "entorno". No es nada mas que un
area donde se guardan ciertas variables con su contenido.
Es importante entender que cada programa de windows tiene su entorno
(igual
o diferente o otro programa). Los entornos se heredan.
Es decir, cada programa (y el propio interprete de comandos, cmd.exe,
no es
una excpecion) cuando se lanza, "hereda" dicho
entorno. Por heredar, no quiere decir que "use" el mismo que el
programa
padre, sino que al lanzarse, el "loader" del sistema
operativo lo que realiza es una copia del entorno padre en una nueva
area de
datos y al lanzar el programa le da como direccion
del area de entorno esa nueva copia del entrono del "padre".
Es decir, cualquier modificacion en las variables de entorno dentro de
un
programa no afecta al sistema ni al resto de programas,
ya que lo que haría es modificar su propio entorno: la copia del
entorno
original del programa padre.
El sistema operativo al cargarse predefine ya una serie de variables
de
entorno. Podemos verlas, bien con boton derecho en Mi PC,
propiedades, pestaña de opciones avanzadas y boton de variables de
entorno,
o bien de una manera mas simple, lanzando el
interprete de comandos (cmd.exe) y tecleando el comando "set" (sin
comillas).
NOTA: Realmente, aunque lo veamos en conjunto, existen dos entornos:
uno del
sistema y uno de usuario, pero la vision de ambos es
en conjunto.
Acabamos de ver nuestro primer comando: "set". Este comando nos
permite no
solo ver todas las variables, sino tambien definir /
cambiar / borrar su contenido y algunas opciones mas.
Si lo ejecutamos por consola, nos dará al similar a:
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\mi usuario\Datos de programa
CommonProgramFiles=C:\Archivos de programa\Archivos comunes
COMPUTERNAME=MIMAQUINA
ComSpec=C:\WINDOWS\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=C:
HOMEPATH=\Documents and Settings\mi usuario
NUMBER_OF_PROCESSORS=1
OS=Windows_NT
Path=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;.etc
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 7 Stepping 3, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION03
ProgramFiles=C:\Archivos de programa
...etc
Fijemonos que la estructura es: nombre de variable=contenido de la
variable
Las variables, dentro de una consola de comandos o bien dentro de un
script
se referencian para poder ver su contenido, encerradas
entre simbolos de %. Por ejemplo, en el caso anterior, para ver el
conetido
de la variable COMPUTERNAME, simplemente podemos
ejecutar:
echo %COMPUTERNAME%
esto nos dará como resultado:
MIMAQUINA
Igualmente podriamos cambiarlo con el comando set citado
anteriormente:
set COMPUTERNAME=nuevoNOMBRE
Pero...
* ¿esto realmente tiene el efecto de cambiar el nomnbre del
ordenador?. Por
supuesto que no. Esto solo cambia el contenido de
dicha variable. ¿donde lo cambia?: pues tal y como hemos comentado
anteriormente, lo cambia en el entorno del programa, es decir
en la copia del entorno original heredado por el programa. En nuestro
caso,
al ejecutarlo desde un cmd.exe, implica que cambia el
entorno del cmd.exe (y solo de él, es decir si tuviesemos lanzadas dos
consolas de comandos, cada una de ellas con cmd.exe, solo
se cambiará en el cmd.exe que hayamos ejecutado ese comando "set"). Y
¿para
que puede servir?: simple, si recordamos que un
programa hereda una copia del entorno del programa que lo lance, esto
implicará que todo lo que lancemos desde esa consola de
comandos, tendrá el contenido de esa variable modificado.
* ¿como podemos crear una nueva variable de entorno?: tan simple como
darle
un nombre y asignarle su contenido. Es decir:
set nuevo=prueba
esto creará, si no esxite, o modificará el contenido si existiese, de
una
variable de entorno llamada "nuevo", y le asignará el
contenido de "prueba".
* ¿podemos asignar a una variable el contenido de otra?: si por
supuesto.
Simplemente recordando que el contenido de una variable
es precisamente el nombre de la variable encerrada entre simbolos %.
Es
decir:
set otra=%nuevo%
esto creará la variable "otra" con el contenido de la variable
"nuevo", el
cual era el texto "prueba". Es decit si despues de
ejecutar el comando anterior, ejecutamos:
echo %otra%
su resultado será:
prueba
* ¿como podemos borrar -eliminar- una variable?. Simplemente no
asignando
nada. Es decir:
set otra
esto borrará la variable. Si ahora damos el comando "set" que nos
muestra
todas las variables, la variable "otra" ya no aparecerá.
* ¿puedo concatenra textos con variables en una asignacion?: Si, por
supuesto. Por ejemplo:
set otra_de_neuevo=Esto es una %nuevo% de concatenacion
El resultado de lo anterior será que la variable "otra_de_nuevo"
contendrá
el valor "Esto es una prueba de concatencion".
* ¿podemos tener contenidos numericos y no solo alfabeticos y por
tanto
realizar operaciones matematicas con el comando set?. Si,
se puede. La manera es con el modificador /a. Pongamos un ejemplo:
set n#4 (asignar 234 a la variable "n")
set /a i=%n%/4
veremos que esto nos devuelve por pantalla el valor 58 (es decir la
division
de 234/4) y ademas se lo asigna a la variable "i").
Es necesario el modificador /a, ya que si no lo hubiesemos puesto,
entonces
la expresion:
set i=%n%/4
no hubiese realizado la operacion matematica y se hubiese quedado con
el
contenido (como literal) de:
234/4
es decir una cadena de caracteres con ese contenido y no con el
resultado
matematico de la divison.
Fijemonos, por curiosida en este ultimo caso y se puede ir realizando
una
prueba en una consola de comandos.
Realicemos:
set n#4
set i=%n%/4
echo %i%
vermos entonces:
234/4
si ahora realizamos:
set /a j=%i%
¿que contendrá?. ¿contendrá el literal de texto "234/4"? ¿o solo "234"
ya
que el caracter "/" no es numerico? ¿o contendrá "58"?
Realizarlo como prueba :-)
La asignacion a una varialbe numerica, puede ser, decimal, o bien
hexadecimal o bien octal.
Es decir, podemos hacer:
set /a i
set /a i=0x0E
en ambos casos contendrá el decimal 14 .recordemos que el hexadecimal
0E
equivale al decimal 14).
O bien, si queremos introducir un numero en octal, simplemente lo
empezamos
por cero.
set /a i1
hay que tener cuidado con esto, ya que el octal 021 es el decimal 17.
Podeis
comprobarlo en pantalla simplemente tecleando la
linea anterior y viendo el resultado. Siempre los resultados nos los
expresará en decimal.
Esto puede ser util para convertir directamente de hexadecimal o bien
de
octal a decimal de una manera rapida.
* Ya que hemos empezado empezado con el comando "set" vamos a
finalizar todo
lo que dicho comando puede hacer. Ademas de lo
anterior:
set p
nos mostrará en pantalla "todas" las variables de entorno que empiecen
por
p. Y para finalizar el modificador /p. Es decir, una
sintaxis del estilo:
set /p variable=[literal]
lo que hace es muestra el "literal" en pantalla y el cursor se queda a
continuacion esperando que metamos un dato. Cuando lo
metemos y tecleamos intro, lo que hayamos tecleado se asignará a la
variable
de entorno definida en el set. Es decir, por ejemplo:
set /p dato=Introduce datos:
Nos mostrará por pantalla:
Introduce datos:_
Y cuando los metamos, los asignará a la variable "dato". Estoi es
válido
realizarlo en un script. En ese momento se detendrá la
ejecucion del script y nos pedirá datos por pantalla. Cuando los
introduzcamos y pulsemos la tecla intro, se los asignará a dicha
variable y continuará la ejecución del script.
CARACTERES ESPECIALES
Hay ciertos caracteres "especiales" que hay que usar con estremada
precaucion: por ejemplo, evitar usar, a no ser que lo
necesitemos expliticamente, caracteres reservados como &, >, <, |, %
Pongamos un ejemplo. El caracter & ("and" en inglés, es decir "y" en
castellano) se interpreta como un y, es decir, ejecutar lo
que hay antes del & y además a continuacion, ejecutar lo que hay
despues del
&. Es decir, si ejecutamos:
set var=a&a
nos dará un error que veremos por pantalla:
"a" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.
*¿que ha hecho el sistema?. Ha ejecutado el comando que hay antes del
&, es
decir:
set var=a
Por tanto le ha asignado a la variable de entorno "var" el contenido
"a". A
continuacion, intenta ejecutar lo que hay despues del
&, es decir intenta interpretar el comando "a". Como "a" no es un
comando
reconocido, ni un .exe, ni un .com, ni el nombre de otro
script nos dará el error mostrado anteriormente. Curiosamente:
set var=a&cmd
¿que hace?. Ejecutarlo y ver el resultado.
Pero...¿y si realmente queremos asignar el contenido del literal "a&a"
a la
variable "var", como lo hacemos?. Simplemente
anteponiendo el caracter ^ a cualquiera de los caracteres especiales.
Es
decir, en nuestro caso deberiamos haber hecho:
set var=a^&a
posteriormente un:
echo %var%
nos mostrará el contenido de lo que realmente deseabamos.
NOTA: Un error bastante corriente cuando se usan caracteres de
asignacion y
concatenacion (&) en la misma linea puede ser:
set var=prueba & ser var1=otra_prueba
¿cual es, o puede ser, el error cometido? pues...recordemos que todo
lo
anterior al & se ejecuta como un comando. Es decir ¿que
hemos asignado a la variable "var"?. Podemos suponer que "prueba".
Pero no
es así, hemos asignado todo lo anterior al &, es decir
"prueba " -con un espacio en blanco al final. Esto nos puede causar
problemas posteriores si lo que queriamos hacer era asignar
solo "prueba".
Podemos verificarlo tecleando:
echo *%var*
Es decir, que no muestre un *, el contenido de var y otro *. Esto nos
mostrará:
*prueba *
con el fatidico (en este caso) caracter en blanco al final.
jmt
deabru... bai deabrunaiz (ekiozuTEarrobadeabruELpuntoGcom fuera
mayusculas!)
EChM#5040 (7!)
KYI NOW!
Kawasaki ZX6R'98 ninja (green power!)
Vespa PX 200'89
VW Golf GTI MK2 8v'89
No a las patentes de software http://proinnova.hispalinux.es/
"Somos moteros, no víctimas de la moda" (c) Paul Carmichael
Leer las respuestas