Task[edit]
Find the index of a string (needle) in an indexable, ordered collection of strings (haystack).

Raise an exception if the needle is missing.

If there is more than one occurrence then return the smallest index to the needle.

Extra credit
Return the largest index to a needle that has multiple occurrences in the haystack.

See also
 Search a list of records

@echo off
setlocal enabledelayedexpansion
 
	%==Sample list==%
set "data=foo, bar, baz, quux, quuux, quuuux, bazola, ztesch, foo, bar, thud, grunt"
set "data=%data% foo, bar, bletch, foo, bar, fum, fred, jim, sheila, barney, flarp, zxc"
set "data=%data% spqr, wombat, shme, foo, bar, baz, bongo, spam, eggs, snork, foo, bar"
set "data=%data% zot, blarg, wibble, toto, titi, tata, tutu, pippo, pluto, paperino, aap"
set "data=%data% noot, mies, oogle, foogle, boogle, zork, gork, bork"
 
	%==Sample "needles" [whitespace is the delimiter]==%
set "needles=foo bar baz jim bong"
 
	%==Counting and Seperating each Data==%
set datalen=0
for %%. in (!data!) do (
	set /a datalen+=1
	set data!datalen!=%%.
)
	%==Do the search==%
for %%A in (!needles!) do (
	set "first="
	set "last="
	set "found=0"
	for /l %%B in (1,1,%datalen%) do (
		if "!data%%B!" == "%%A" (
			set /a found+=1
			if !found! equ 1 set first=%%B
			set last=%%B
		)
	)
 
	if !found! equ 0 echo."%%A": Not found.
	if !found! equ 1 echo."%%A": Found once in index [!first!].
	if !found! gtr 1 echo."%%A": Found !found! times. First instance:[!first!] Last instance:[!last!].
 
)
	%==We are done==%
echo.
pause