Код:

@Echo Off
SetLocal EnableDelayedExpansion
Set Input=work.csv
Set SphericalStandardFileInVacuum=standard.csv
:: Подготавливаем входящий файл
Copy "%Input%" "%Input%.bak">nul
Echo.>"%Input%"
:: Читаем файл-эталон и пишем строки из него в массив
Set StdData[]=
For /F "usebackq eol= tokens=1 delims=;" %%A In ("%SphericalStandardFileInVacuum%") Do (Set StdData[]=!StdData[]! %%A )
:: Разбираем входящий файл поблочно
For /F "usebackq eol= delims=" %%A In ("%Input%.bak") Do (
Set Data=%%A
:: Работа с содержимым
If "!Block!"=="true" If "!Data:~,6!"=="20100;" (
Set Block=false
:: Обрабатываем данные
Call :ParseBlock
:: Удаление
Call :DeleteBlock
)
:: Определение начала блока
If "!Data:~,6!"=="20100;" (
Set Block=true
Set i=0
)
:: Запись содержимого блока
If "!Block!"=="true" (
Set /A i+=1
Set BlockData_!i!=!Data!
)
)
:: Обработка завершающего блока
If Defined BlockData_1 (
Call :ParseBlock
Call :DeleteBlock
)
Del "%Input%.bak"
Pause&Exit
:ParseBlock
:: Пишем в массив строки, входящие в блок, одновременно с тем сохраняя их значения для последующего использования
Set BlockData[]=
For /F "eol= tokens=2,* delims=;=" %%A In ('Set BlockData_') Do (
Set BlockData[]=!BlockData[]! %%A
Set Data_%%A=%%B
)
:: Проходимся по массиву файла-эталона, определяя, какие строки в него включены
For %%A In (!StdData[]!) Do (
Echo "!BlockData[]!"|Find " %%A ">nul&&(
>>"%Input%" Echo %%A;!Data_%%A!
)||(
>>"%Input%" Echo %%A;0
)
)
Exit /B
:DeleteBlock
:: Удаляем все записи блока
For /F "tokens=1 delims==" %%B In ('Set BlockData_') Do (Set %%B=)
Exit /B