Saludos, vengo acá con una pregunta que pudiera parecer algo tonta, pero no logro resolverlo, a ver si ustedes se les ocurre una mejor idea.
tengo un archivo de texto llamado calificar.txt con este contenido:
<td> <input type='image' src='../img/up.png' width='20px' height='20px' value='Like' id='like_28097' class='like'> <small><b>(<span id='likes_28097'>21</span>)</small></b> <input type='image' src='../img/down.png' width='20px' height='20px' value='Unlike' id='unlike_28097' class='unlike'> <small><b>(<span id='unlikes_28097'>3</span>)</small></b> </td>
todo en una sola línea... lo que quiero es extraer de esa línea dos variables LIKES y DISLIKES...
de modo que el resultado de esto:
echo LIKES: %LIKES% DISLIKES: %DISLIKES%
sea esto:
LIKES: 21 DISLIKES: 3
Se me había ocurrido contar los caracteres:
<"calificar.txt" set /p "CALIFICAR="
SET LIKES="%CALIFICAR:~167,2%"
funciona, pero... con los dislikes no funcionaría si a veces los likes son de 2 dígitos y a veces de 1, entonces el dislike a veces se mostraría bien y otras veces no...
¿Qué me sugieren para resolverlo?
Para hacer token-ización se usa el
For /F, puedes ver su referencia completa en: https://ss64.com/nt/for_f.html
@Echo Off
For /F "tokens=10,22 delims=<,>" %%a In (calificar.txt) Do Echo LIKES: %%a DISLIKES: %%b
Pause
Prueba:
CitarC:\Users\EdSon\Desktop>type calificar.txt
<td> <input type='image' src='../img/up.png' width='20px' height='20px' value='Like' id='like_28097' class='like'> <small><b>(<span id='likes_28097'>21</span>)</small></b> <input type='image' src='../img/down.png' width='20px' height='20px' value='Unlike' id='unlike_28097' class='unlike'> <small><b>(<span id='unlikes_28097'>3</span>)</small></b> </td>
C:\Users\EdSon\Desktop>type likes.cmd
@Echo Off
For /F "tokens=10,22 delims=<,>" %%a In (calificar.txt) Do Echo LIKES: %%a DISLIKES: %%b
Pause
C:\Users\EdSon\Desktop>likes.cmd
LIKES: 21 DISLIKES: 3
Presione una tecla para continuar . . .
Excelente, me funcionó perfecto, y ¿Cómo haría para establecerlos como variables?
Intenté con esto y no funcionó:
For /F "tokens=10,22 delims=<,>" %%a In (calificar.txt) Do SET "LIKES=%%A" Do SET "DISLIKES=%%B"
Tienes que agrupar las instrucciones a ejecutar con Do entre paréntesis, esto si son más de uno, caso contrario tal como puse en el ejemplo anterior no es necesario para una sola instrucción o instrucciones seguidas en la misma línea:
@Echo Off
For /F "tokens=10,22 delims=<,>" %%a In (calificar.txt) Do (
Set LIKES=%%a
Set DISLIKES=%%b
)
Echo LIKES: %LIKES% DISLIKES: %DISLIKES%
Pause
Instrucciones seguidas en la misma línea:
@Echo Off
For /F "tokens=10,22 delims=<,>" %%a In (calificar.txt) Do Set "LIKES=%%a" & Set "DISLIKES=%%b")
Echo LIKES: %LIKES% DISLIKES: %DISLIKES%
Pause
- Uso las comillas para evitar que se agregue en espacio que dejo antes del & y porque así recomiendan para evitar problemas con espacios en el contenido de las variables
Siempre puedes tener a mano este tutorial de Batch: Tutorial de Programación Batch (Nikos3194, 2013)
https://sites.google.com/site/nikos3194rfcindex/Tutorial%20de%20programacion%20Batch%20%5Bfinal%5D.pdf
Y por supuesto la misma ayuda de poniendo el /?, Ej: for /?
Para cosas más detalladas está la referencia de Batch en inglés: https://ss64.com/nt/
Hola, en mis primeros comienzos en programación he aprendido Bach y he usado este tutorial:
[PDF] Tutorial de Batch para novatos - Juanla
CURSO DE BATCH DESDE 0 – POR JUANLA
https://ensayandopopup.webcindario.com/pdfs/batch.pdf
Me ayudó bastante para poder aprender sobre batch.
No sé porque pero con el tiempo y hasta hoy en día he visto muchos otros tutoriales de Bach pero éste que dejé no lo he vuelto a ver... qué raro parece como que quedó en el olvido siendo un muy buen tutorial y que de ese tutorial/curso he aprendido bastante.
Saludos
Cita de: EdePC en 9 Noviembre 2020, 04:04 AM
Tienes que agrupar las instrucciones a ejecutar con Do entre paréntesis, esto si son más de uno, caso contrario tal como puse en el ejemplo anterior no es necesario para una sola instrucción o instrucciones seguidas en la misma línea:
@Echo Off
For /F "tokens=10,22 delims=<,>" %%a In (calificar.txt) Do (
Set LIKES=%%a
Set DISLIKES=%%b
)
Echo LIKES: %LIKES% DISLIKES: %DISLIKES%
Pause
Instrucciones seguidas en la misma línea:
@Echo Off
For /F "tokens=10,22 delims=<,>" %%a In (calificar.txt) Do Set "LIKES=%%a" & Set "DISLIKES=%%b")
Echo LIKES: %LIKES% DISLIKES: %DISLIKES%
Pause
- Uso las comillas para evitar que se agregue en espacio que dejo antes del & y porque así recomiendan para evitar problemas con espacios en el contenido de las variables
Siempre puedes tener a mano este tutorial de Batch: Tutorial de Programación Batch (Nikos3194, 2013)
https://sites.google.com/site/nikos3194rfcindex/Tutorial%20de%20programacion%20Batch%20%5Bfinal%5D.pdf
Y por supuesto la misma ayuda de poniendo el /?, Ej: for /?
Para cosas más detalladas está la referencia de Batch en inglés: https://ss64.com/nt/
Muchísimas gracias, de verdad fue de mucha ayuda :D