[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

Preguntas similare

Leer las respuestas

#1 JM Tella Llop [MVP Windows]
19/08/2006 - 18:42 | Informe spam
news://jmtella.com

puedes seguir haciendo propaganda :-)


Jose Manuel Tella Llop
MVP - Windows
(quitar XXX)
http://www.multingles.net/jmt.htm
news://jmtella.com

Este mensaje se proporciona "como está" sin garantías de ninguna clase,y no
otorga ningún derecho.

This posting is provided "AS IS" with no warranties, and confers no
rights.
You assume all risk for your use.




"deabru" wrote in message
news:
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















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


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida