No, you can not use a *string* as a delimiter in the `delims=` clause. Of course you can include the string, but it will be handled as a set of separate characters that will be used as delimiters, not as a delimiter string.
If you really need to split on a string, the fastest approach could be to replace the *delimiter string* by a character not included in the data and use this character as delimiter
<!-- language: lang-dos -->
@echo off
setlocal enableextensions disabledelayedexpansion
for /f "delims=" %%a in ("this is a +test!! #+# of string #splitting#") do (
set "buffer=%%a"
setlocal enabledelayedexpansion
(for /f "tokens=1,2 delims=¬" %%b in ("!buffer:#+#=¬!") do (
endlocal
echo full line : [%%a]
echo first token : [%%b]
echo second token : [%%c]
)) || if "!!"=="" endlocal
)
**Note**: The `setlocal enabledelayedexpansion` is needed to be able to read the variable changed inside the `for` loop retrieving the data (here simulated directly including a string). Then, inside the `for` loop that tokenizes the readed line, delayed expansion is disabled to avoid problems with the `!` characters (if delayed expansion is active, they will be consumed by the parser). This is the reason for the `endlocal` inside the loop.
As we are doing a string replacement and it is possible to end with a string composed of only delimiters, it is possible that the `do` clause of the inner `for` will not be executed, so the final `if` is included to ensure that the `enabledelayedexpansion` is cancelled.