variable una salida guardar comando batch asignar flash variables batch-file registry

flash - una - Asignar salida de comando a variable en archivo por lotes



asignar salida comando variable batch (4)

Estoy tratando de asignar la salida de un comando a una variable, como en, estoy tratando de establecer la versión actual de flash a una variable. Sé que esto está mal, pero esto es lo que he intentado:

establecer var = reg query hklm / SOFTWARE / Macromedia / FlashPlayer / CurrentVersion>

o

reg query hklm / SOFTWARE / Macromedia / FlashPlayer / CurrentVersion >> set var

Sí, como puedes ver, estoy un poco perdido. ¡Cualquier y toda ayuda es apreciada!


Bien, aquí una muestra más compleja para el uso de For / F

:: Main @prompt -$G call :REGQUERY "Software/Classes/CLSID/{3E6AE265-3382-A429-56D1-BB2B4D1D}" @goto :EOF :REGQUERY :: Checks HKEY_LOCAL_MACHINE/ and HKEY_CURRENT_USER/ :: for the key and lists its content @call :EXEC "REG QUERY HKCU/%~1" @call :EXEC "REG QUERY "HKLM/%~1"" @goto :EOF :EXEC @set output= @for /F "delims=" %%i in (''%~1 2^>nul'') do @( set output=%%i ) @if not "%output%"=="" ( echo %1 -^> %output% ) @goto :EOF

Lo empaqué en la función secundaria : EXEC así que todos sus desagradables detalles de implementación no ensucian el script principal. Así que tiene algo de un tutorial por lotes. Notas sobre el código:

  1. la salida del comando ejecutado mediante llamada: el comando EXEC se almacena en % de salida% . Batch cmd no se preocupa por los ámbitos, por lo que% output% también estará disponible en el script principal.
  2. el @ el comienzo es solo decoración y allí para suprimir el eco de la línea de comando. Puedes borrarlos a todos y simplemente poner un @echo apagado en la primera línea realmente no me gusta. Sin embargo, me parece que la depuración es mucho más agradable. Decoración Número dos es rápido - $ G. Está ahí para hacer que el símbolo del sistema se vea así ->
  3. Yo uso :: en lugar de rem
  4. la tilde (~) en % ~ 1 es para eliminar las citas del primer argumento
  5. 2 ^> nul está ahí para suprimir / descartar la salida de error de stderr . Normalmente lo harías a través de 2> nul . Bueno, el ^ el char de escape del lote está allí evita resolver el redirector (>) temprano. Hay un poco de simulacro de uso un poco más adelante en el script: echo %1 -^>... por lo que ^ permite que la salida a ''>'' a través de echo no haya sido posible.
  6. incluso si la comparación en @if not "%output%"=="" parece a la mayoría de los lenguajes de programación comunes, es quizás diferente de lo que esperaba (si no está acostumbrado a MS-batch). Bueno, elimina la ''@'' al principio. Estudia la salida. Cambie a not %output%=="" -rerun y considere por qué esto no funciona. ;)

No puede asignar una salida de proceso directamente a una var, necesita analizar la salida con un ciclo For / F:

@Echo OFF FOR /F "Tokens=2,*" %%A IN ( ''Reg Query "HKEY_CURRENT_USER/Software/Macromedia/FlashPlayer" /v "CurrentVersion"'' ) DO ( REM Set "Version=%%B" Echo Version: %%B ) Pause&Exit

http://ss64.com/nt/for_f.html

PD: Cambie la clave de registro utilizada si es necesario.


Ya se diseñó un método, sin embargo, de esta manera no necesita un archivo temporal.

for /f "delims=" %%i in (''command'') do set output=%%i

Sin embargo, estoy seguro de que esto tiene sus propias excepciones y limitaciones.


Esta publicación tiene un método para lograr esto

from (zvrba) Puede hacerlo redirigiendo la salida a un archivo primero. Por ejemplo:

echo zz > bla.txt set /p VV=<bla.txt echo %VV%