Я вызываю команду powershell в пакетном режиме и хочу сохранить $ tmpVersion в пакетной переменной «версия».
set version = powershell.exe -Command "$tmpVersion = (Get-ItemProperty 'HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\myapp').DisplayVersion;"
for /F "delims = " %%a in ('powershell.exe etc...') do set "version=%%a"
, но вам нужно также удалить часть $tmpVersion =
...
Не используйте в первую очередь командный файл. Напишите сценарий в PowerShell.
Почему бы просто не использовать для этого Reg.exe вместо гибридного пакета / скрипта?
Вы можете использовать цикл For
, чтобы сохранить результат команды как переменную:
powershell.exe
, пример:
@Echo Off
Set "RegRoot=HKLM"
Set "RegKey=SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\myapp"
Set "RegVal=DisplayVersion"
Set "Version = "
For /F %%A In (
'PowerShell -NoP -NoL "(GP '%RegRoot%:%RegKey%').%RegVal%" 2^>Nul'
) Do Set "Version=%%A"
If Not Defined Version Exit /B
Echo %Version%
Pause
reg.exe
, пример:
@Echo Off
Set "RegRoot=HKLM"
Set "RegKey=SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\myapp"
Set "RegVal=DisplayVersion"
Set "Version = "
For /F "Tokens=2*" %%A In ('Reg Query "%RegRoot%\%RegKey%" /V "%RegVal%" 2^>Nul'
) Do Set "Version=%%B"
If Not Defined Version Exit /B
Echo %Version%
Pause
WMIC.exe
, пример:
@Echo Off
Set "RegRoot=&H80000002"
Set "RegKey=SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\myapp"
Set "RegVal=DisplayVersion"
Set "Version = "
For /F Tokens^=2Delims^=^" %%A In ('WMIC Class StdRegProv
Call GetStringValue hDefKey^ = "%RegRoot%" sSubKeyName^ = "%RegKey%"
sValueName^ = "%RegVal%" 2^>Nul') Do Set "Version=%%A"
If Not Defined Version Exit /B
Echo %Version%
Pause
Вы что-нибудь пробовали? Мол, убрать
$tmpVersion =
, или добавить$tmpVersion
в самый конец?