目前还不是很清楚你想要什么结果,但我假设你只想读取一次注册表值,然后更新这些行。
set current_shockwave_version=1
set current_flash_version=1
有了新的价值观。
最简单的方法是将这两行移动到一个config.bat文件中,然后你可以使用类似的东西
call config.bat
echo current_flash_version = %current_flash_version%
:UpdateValues
FOR /F "tokens=2*" %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Macromedia\FlashPlayer" /v CurrentVersion ') DO SET Installed_Flash_Version=%%B
FOR /F "tokens=2*" %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Shockwave 11\currentupdateversion" ') DO SET Installed_Shockwave_Version=%%B
(
echo set current_shockwave_version=%Installed_Shockwave_Version%
echo set current_flash_version=%Installed_Flash_Version%
) > config.bat
编辑:关于在同一个批处理文件中替换的评论 替换同一个批处理文件
中的值不是一个好主意,因为要做到这一点,您需要在批处理运行时重写它。
这可以做到,但很棘手,特别是如果值的长度不一样,批处理会有点不可靠。
当您将数据库值的设置移动到文件末尾时,您可以解决它,但 IMO 更改当前正在运行的批处理并不是最好的主意。
@echo off
call :setValues
echo current_flash_version = %current_flash_version%
call :UpdateValues
echo new current_flash_version = %current_flash_version%
exit /b
:UpdateValues
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Macromedia\FlashPlayer" /v CurrentVersion ') DO SET Installed_Flash_Version=%%B
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Adobe\Shockwave 11\currentupdateversion" ') DO SET Installed_Shockwave_Version=%%B
REM ** Copy and modify the own batch
findstr /v /r "##DB##$" "%~f0" > "%~f0.tmp"
(
(echo set "current_shockwave_version=%Installed_Shockwave_Version%" ^& REM ##DB##)
(echo set "current_flash_version=%Installed_Flash_Version%" ^& REM ##DB##)
) >> "%~f0.tmp"
(
copy "%~f0.tmp" "%~f0"
del "%~f0.tmp"
)
call :setValues
exit /b
:setValues
set "current_shockwave_version=1" & REM ##DB##
set "current_flash_version=1" & REM ##DB##