I have a delimited list of IPs I'd like to process individually. The list length is unknown ahead of time. How do I split and process each item in the list?
@echo off set servers=127.0.0.1,192.168.0.1,10.100.0.1 FOR /f "tokens=* delims=," %%a IN ("%servers%") DO call :sub %%a :sub echo In subroutine echo %1 exit /b
Outputs:
In subroutine 127.0.0.1 In subroutine ECHO is off.
Update: Using Franci's answer as reference, here's the solution:
@echo off set servers=127.0.0.1,192.168.0.1,10.100.0.1 call :parse "%servers%" goto :end :parse setlocal set list=%1 set list=%list:"=% FOR /f "tokens=1* delims=," %%a IN ("%list%") DO ( if not "%%a" == "" call :sub %%a if not "%%b" == "" call :parse "%%b" ) endlocal exit /b :sub setlocal echo In subroutine echo %1 endlocal exit /b :end
Outputs:
In subroutine 127.0.0.1 In subroutine 192.168.0.1 In subroutine 10.100.0.1
The for command handles a number of delimiters by default. In this case you can do
@echo off set servers=127.0.0.1,192.168.0.1,10.100.0.1 for %%i in (%servers%) do ( echo %%i )
If you run into a delimiter that is not natively supported, you could do a replace to first prepare the string so it is in the right format
@echo off set [email protected]@10.100.0.1 set servers=%servers:@=,% for %%i in (%servers%) do ( echo %%i )
Using recursive calls has the chance to run out of stack space once you go over a certain number of items in the list. Also testing it, the recursion pattern seems to run a bit slower.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With