2012-02-22 11 views
7

Estoy tratando de crear una cadena de lotes así: > abcd_lotes Concatenación

tengo una variable llamada soeid, con valor como ABCD. Entonces esto es lo que estoy haciendo, pero no funciona.

set soeid=abcd 

set "val1=>" 
set "val2=_" 
set "str=%val1%%soeid%%val2%" 

echo %str% 
+5

Lo primero que debe escribir después de "no funciona" es una explicación de * cómo * no funciona. No podemos leer su mente o ver su pantalla desde aquí; todo lo que tenemos que hacer es lo que nos dices en tu pregunta. Si necesita ayuda, debe decirnos cuál es el problema que tiene y cómo no funcionó. –

Respuesta

11

Estoy seguro de que está funcionando bien. Para probarlo, agregue SET STR después de definir el valor, y verá el valor correcto.

El problema que tiene es cuando intenta hacer eco del valor, la línea que se está ejecutando se convierte en: echo >abcd_. El > no es citado o escaparon, por lo que es simplemente tomar que la salida de la ECHO sin argumentos y redirigir a un archivo llamado "abcd_"

Si no te importa ver las citas, a continuación, cambiar su línea para echo "%str%" y funcionará.

La otra opción es habilitar y utilizar la expansión retardada (estoy asumiendo que esto es un código de script por lotes, y no se ejecuta en la línea de comandos) se produce

setlocal enableDelayedExpansion 
set soeid=abcd 

set "val1=>" 
set "val2=_" 
set "str=%val1%%soeid%%val2%" 

echo !str! 

normal expansión %var% desde el principio, mientras que el intérprete está analizando la línea. La expansión demorada !var! ocurre al final justo antes de que se ejecute. La redirección se detecta en algún lugar en el medio. Es por eso que la expansión normal no funciona: el intérprete ve el carácter expandido > y lo interpreta como el operador de redirección de salida. La expansión retrasada oculta el carácter > del intérprete hasta que se haya analizado la redirección.

Para obtener más información acerca de la expansión retrasada, escriba SET /? desde la línea de comandos y lea comenzando con el párrafo que comienza con "Finalmente, soporte para la expansión variable de entorno demorado ...".

+0

Muchas gracias funcionó bien ahora. El problema fue que utilicé echo% str% en lugar de! Str !. Por favor podrías explicarme la diferencia entre los dos. – NewQueries

+0

@ NewQueries- extendí mi respuesta con una explicación – dbenham