Basta ya de buscar por otros sitios porque llegaste al sitio indicado, contamos con la solución que buscas pero sin problemas.
Solución:
No funciona porque el completofor
bucle (del for
al último paréntesis de cierre, incluso los comandos entre esos) se evalúa cuando se encuentra, antes de comienza a ejecutarse.
En otras palabras, %count%
se reemplaza con su valor 1
antes de ejecutar el bucle.
Lo que necesitas es algo como:
setlocal enableextensions enabledelayedexpansion
set /a count = 1
for /f "tokens=*" %%a in (config.properties) do (
set /a count += 1
echo !count!
)
endlocal
Expansión retardada usando !
en vez de %
le dará el comportamiento esperado. Consulte también aquí.
También tenga en cuenta que setlocal/endlocal
en realidad, limite el alcance de las cosas cambiadas en el interior para que no se filtren. Si quieres usar count
después el endlocal
, tienes que usar un “truco” que es posible gracias al mismo problema que estás teniendo:
endlocal && set count=%count%
Digamos count
se ha convertido en 7 dentro del ámbito interno. Debido a que todo el comando se interpreta antes de la ejecución, efectivamente se convierte en:
endlocal && set count=7
Entonces, cuando sea ejecutado, el visor interior se cierra, volviendo count
a su valor original. Pero, desde el establecimiento de count
a siete ocurre en el alcance externo, efectivamente está filtrando la información que necesita.
Usted puede string juntos varios subcomandos para filtrar toda la información que necesite:
endlocal && set count=%count% && set something_else=%something_else%
para a = 1 a 100 paso 1
Línea de comando en Windows. Utilice %% a si se ejecuta en un archivo por lotes.
for /L %a in (1,1,100) Do echo %a
valoraciones y comentarios
Ten en cuenta comunicar esta división si te valió la pena.