
Tengo muchos problemas con este script. Se supone que debe leer un archivo (que el usuario especifica) y luego guardarlo en la storeresult
variable 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 storvar
en 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 set
el comando solo son válidas dentro del alcance del proceso en el que se definen. Es fácil demostrarlo con un experimento:
- Abra un símbolo del sistema e intente definirlo
set a = b
. Úseloset
para verificar que esté correctamente definido. - Ahora, abra un segundo símbolo del sistema e invoque
set
. Verás quea
no está definido en este ámbito.
storvar.exe
es 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.