El archivo por lotes no devuelve el valor correcto después de usar bat para ejecutar

El archivo por lotes no devuelve el valor correcto después de usar bat para ejecutar

Tengo muchos problemas con este script. Se supone que debe leer un archivo (que el usuario especifica) y luego guardarlo en la storeresultvariable de entorno.

Estoy usando un convertidor de BAT a EXE que no afecta ningún comando por lotes, así que no es eso. (Solo si te preguntas por qué llamo storvaren lugar de storvar.bat)

El guión principal ( storvar.exe):

set a=%~1
set b=%~2
set c=%~3
for /f "delims=" %%a in (stor\%a%.stor) do set storeresult=%%a
pause

El script que estoy usando para llamar al script (sin errores al llamar):

storevar Hi hi
pause
echo %storeresult%
pause

Cuando lo llamo, simplemente devuelve el resultado ( %storeresult%) como nada, ¡no puedo encontrar el problema!

Respuesta1

Cuando intentas definir y utilizar una variable, siempre debes tener en cuenta sualcance.

Las variables de entorno que usted define usando setel comando solo son válidas dentro del alcance del proceso en el que se definen. Es fácil demostrarlo con un experimento:

  1. Abra un símbolo del sistema e intente definirlo set a = b. Úselo setpara verificar que esté correctamente definido.
  2. Ahora, abra un segundo símbolo del sistema e invoque set. Verás que ano está definido en este ámbito.

storvar.exees un proceso separado. Por tanto, tiene su propio alcance. Cualquier variable de entorno que defina permanece allí y se elimina cuando sale.

Entonces, ¿hay alguna alternativa?Bueno, sí. Yo mismo uso PowerShell en lugar de los archivos por lotes obsoletos; puede extraer cosas del archivo y usarlas inmediatamente o emitirlas al siguiente script. (Microsoft admite oficialmente la compilación de PowerShell en EXE, aunque también puede encontrar versiones orientadas a novatos en TechNet Gallery). AutoIt es otra alternativa.

información relacionada