Назначение вывода команды переменной в пакетном файле

Я пытаюсь назначить вывод команды переменной-как в, Я пытаюсь установить текущую версию flash в переменную. Я знаю, что это неправильно, но это то, что я пробовал:

установка дисп=Рег запросов в HKLMпрограммное обеспечениепроигрыватель MacromediaFlash плеерараздел CurrentVersion>

или

запрос Рег HKLMпрограммное обеспечениев MacromediaFlash плеераCurrentVersion и >> установить ВАР

да, как вы можете видеть, я немного потерялся. Любой и вся помощь ценится!

4 ответов


методика уже разработана, однако таким образом, вам не нужен временный файл.

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

однако я уверен, что у этого есть свои исключения и ограничения.


этот пост имеет метод для достижения этого

from (zvrba) Вы можете сделать это, сначала перенаправив вывод в файл. Например:

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

вы не можете назначить вывод процесса непосредственно в var, вам нужно проанализировать вывод с помощью цикла 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

PS: при необходимости измените ключ reg.


хорошо здесь более сложный образец для использования Для /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

я упаковал его в функцию sub :в exec таким образом, все его неприятные детали реализации не засоряют основной скрипт. Поэтому он получил какой-то пакетный учебник. Примечания о коде:

  1. вывод из команды, выполняемой через вызов: EXEC команда хранящийся в %выход%. пакетный cmd не заботится об областях, поэтому %output% также будет доступен в основном скрипте.
  2. the @ начало-это просто украшение и там отключить отображение командной строки. Вы можете удалить их все и просто положить некоторые @echo off в первой строке действительно не нравится. Однако, как и это, я нахожу отладку гораздо более приятной. Украшение номер два -подсказка - $G. Это там, чтобы командная строка выглядела так ->
  3. я использую :: вместо rem
  4. Тильда(~) в %~1 удалить кавычки из первого аргумента
  5. 2^>nul есть, чтобы подавить / отбросить stderr вывод ошибок. Обычно вы делаете это через 2 > nul. Также ^ пакетный escape-символ позволяет избежать раннего разрешения перенаправителя (>). Есть некоторые simulare использовать немного позже в сценарии: echo %1 -^>... таким образом, ^ делает возможным вывод a '>' через echo, что иначе было бы невозможно.
  6. даже если сравнить в @if not "%output%"==""похоже на большинство распространенных языков программирования-это может отличаться от ожидаемого (если вы не привыкли к MS-batch). Хорошо удалите " @ " в начале. Изучите результат. Измените его наnot %output%==""-повторите и подумайте, почему это не сработает. ;)