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 ...".
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ó. –