Используйте подстановку строк с подстановочными знаками, чтобы выделить пре- / суффикс
:: Q:\Test\2018\12\06\SO_53652818.cmd
@Echo off
set "string=select a, b, c FROM table1, table2, table3 WHERE something happens"
set "suffix=%string:*where=%"
call set "string=%%string: where%suffix%=%%"
set "tables=%string:* from =%%"
set tables
set "string=select a, b, c from table1"
set "suffix=%string:*where=%"
call set "string=%%string: where%suffix%=%%"
set "tables=%string:* from =%%"
set tables
или изменить слова where
, from
на один разделитель символов
@Echo off
set "string=select a, b, c FROM table1, table2, table3 WHERE something happens"
set "string=%string: where =|%"
set "string=%string: from =|%"
for /f "tokens=2 delims=|" %%A in ("%string%") Do set "tables=%%A"
set tables
Простодругая альтернатива, использующая PowerShell в качестве инструмента с
регулярными выражениями, обеспечивающими поиск (утверждения нулевой длины), который позволяет избежать ошибок, упомянутых dbenham
@Echo off
set "string=select a, b, c FROM table1, table2, table3 WHERE Country='Mexico'"
For /f "usebackq delims=" %%A in (`
powershell -NoP -C "if($ENV:String -match '(?<=FROM ).*?(?= (WHERE|GROUP|ORDER))'){$Matches[0]}"
`) do set "tables=%%A"
set tables