Пакет: Как исправить неправильное поведение при перезаписи переменных при разборе вывода
В пакетном файле я проверяю информацию о базовой плате со следующим:
BaseboardCheck.cmd
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2* delims==" %%a in ('wmic baseboard get /format:list') DO (
if ["%%a"] EQU ["Product"] (
set PlatformInfo=%%b
if defined PlatformInfo (
echo.!PlatformInfo!
echo.!PlatformInfo!This overwrites the variable
)
)
if ["%%a"] EQU ["Version"] (
set BaseboardVersion=%%b
if defined BaseboardVersion (
echo.!BaseboardVersion!
echo.!BaseboardVersion!This overwrites the variable
)
)
)
Проблема выше: переменные перезаписываются, а не добавляются, когда выводится echo.
Выход:
DX79SI
This overwrites the variable
AAG28808-600
This overwrites the variable
То, что я хотел бы получить это:
DX79SI
DX79SIThis overwrites the variable
AAG28808-600
AAG28808-600This overwrites the variable
Я потратил несколько часов на это (и буду продолжать это делать), но надеюсь, что кто-то еще столкнулся с этой проблемой. И я надеюсь, что любой, кто столкнется с этой проблемой синтаксического анализа, сможет избежать ее в будущем.
Дополнительная проблема, которая возникает из-за этого, заключается в том, что она нарушает условную логику.
Обновить
После всей помощи я придумал это решение:
for /f "skip=2 tokens=1,2 delims=," %%a in ('wmic baseboard get Product^,Version^,Width /format:csv') do (
set Platform=%%a
set BaseboardVersion=%%b
)
echo.Platform: %Platform%
echo.Version %BaseboardVersion%.