Ответ 1
Метод уже разработан, однако, таким образом, вам не нужен временный файл.
for /f "delims=" %%i in ('command') do set output=%%i
Однако я уверен, что у этого есть свои исключения и ограничения.
Я пытаюсь присвоить вывод команды переменной - например, я пытаюсь установить текущую версию флэш-памяти для переменной. Я знаю, что это неправильно, но вот что я попробовал:
set var=reg query hklm\SOFTWARE\Macromedia\FlashPlayer\CurrentVersion>
или же
reg query hklm\SOFTWARE\Macromedia\FlashPlayer\CurrentVersion >> set var
Да, как ты видишь, я немного растерялся. Любая помощь приветствуется!
Метод уже разработан, однако, таким образом, вам не нужен временный файл.
for /f "delims=" %%i in ('command') do set output=%%i
Однако я уверен, что у этого есть свои исключения и ограничения.
Этот пост имеет способ достижения этого
из (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
PS: При необходимости измените ключ reg.
Хорошо, здесь более сложный образец для использования 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
Я упаковал его в подфункцию : EXEC, поэтому все ее неприятные детали реализации не помещают основной script. Так что он получил какой-то пакетный учебник. Примечания: "Код:
echo %1 -^>...
, поэтому там ^ позволяет выводить а ' > ' через эхо, что еще не было бы возможно.@if not "%output%"==""
выглядит в большинстве распространенных языков программирования - возможно, оно отличается от ожидаемого (если вы не используете MS-пакет). Удалите "@" в начале. Изучите выход. Измените его на not %output%==""
-rerun и подумайте, почему это не работает.;)Это работа для меня
@FOR /f "delims=" %i in ('reg query hklm\SOFTWARE\Macromedia\FlashPlayer\CurrentVersion') DO set var=%i
echo %var%