J'ai une liste délimitée d'adresses IP que je voudrais traiter individuellement. La longueur de la liste est inconnue à l'avance. Comment séparer et traiter chaque élément de la liste?dos batch itérer dans une chaîne délimitée
@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
Sorties:
In subroutine
127.0.0.1
In subroutine
ECHO is off.
Mise à jour: En utilisant la réponse de Franci comme référence, voici la 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
Sorties:
In subroutine
127.0.0.1
In subroutine
192.168.0.1
In subroutine
10.100.0.1
Bien que la solution récursive est bon, je pense que le remplacement de la nouvelle ligne ci-dessous un est plus simple. – kybernetikos