Вопрос: Поиск подстроки в строке в CMD

Лучший ответ: 0) Идея: в каждом IF'е брать подстроку. К сожалению, подстроку в цикле взять довольно сложно (даже enabledelayedexpansion не помогает, плюс прочие багофичи), но мы можем снова заюзать findstr по строке! (echo ololo | findstr lol > NUL)

1) findstr устанавливает return code при выходе (а он записывается шеллом в ERRORLEVEL). 0 == нашел, 1 == не нашел

2) ERRORLEVEL работает довольно интересно:
условие вида IF NOT ERRORLEVEL 1 это значит ERRORLEVEL == 0 :)

3) Собираем все вместе:
@echo off
set usr=%1
for /f "tokens=1 delims=/.- " %%a in ('type db.txt') do (
echo %%a | findstr VOC > NUL
if NOT ERRORLEVEL 1 (
echo TEST! with %%a we do:
echo TEST! db2 grant execute on function "WEB.F1(INTEGER)" to user %usr% with grant option
echo TEST! db2 grant execute on function "WEB.F2(INTEGER)" to user %usr% with grant option
echo TEST! 
) else (
echo %%a | findstr DAT > NUL
if NOT ERRORLEVEL 1 (
echo TEST! with %%a we do:
echo TEST! db2 grant execute on function "WEB.F3(INTEGER)" to user %usr% with grant option
echo TEST! 
)
)
)


Результат:
B:\>test.bat user1                                                                                               
TEST! with VOC we do:                                                                                            
TEST! db2 grant execute on function "WEB.F1(INTEGER)" to user user1 with grant option                            
TEST! db2 grant execute on function "WEB.F2(INTEGER)" to user user1 with grant option                            
TEST!                                                                                                            
TEST! with DAT1 we do:                                                                                           
TEST! db2 grant execute on function "WEB.F3(INTEGER)" to user user1 with grant option                            
TEST!                                                                                                            
TEST! with DAT2 we do:                                                                                           
TEST! db2 grant execute on function "WEB.F3(INTEGER)" to user user1 with grant option                            
TEST!                                                                                                            
TEST! with DAT3 we do:                                                                                           
TEST! db2 grant execute on function "WEB.F3(INTEGER)" to user user1 with grant option                            
TEST!                                                                                                            
TEST! with DAT4 we do:                                                                                           
TEST! db2 grant execute on function "WEB.F3(INTEGER)" to user user1 with grant option                            
TEST!                                                                                                            


Худший ответ: Согласно справке из findstr /? результат запуска:
findstr /b DAT
выведет строки начинающиеся на DAT.
Соответственно, ваш скрипт будет иметь вид:
for /f "tokens=1 delims=/.- " %%a in ('type db.txt') do (echo %%a | findstr /b DAT)
В принципе, этот скрипт можно даже сделать более универсальным, передавая скрипту искомое значение в виде параметра к нему:
for /f "tokens=1 delims=/.- " %%a in ('type db.txt') do (echo %%a | findstr /b %1)