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!