Prefacio
gran parte de la información en esta respuesta se ha recopilado en base a experimentos ejecutados en una máquina Vista. A menos que se indique explícitamente lo contrario, no he confirmado si la información se aplica a otras versiones de Windows.

FINDSTR output
la documentación nunca se molesta en explicar la salida de FINDSTR. Alude al hecho de que se imprimen líneas coincidentes, pero nada más.,

el formato de salida de línea coincidente es el siguiente:

filename:lineNumber:lineOffset:text

where

fileName: = el nombre del archivo que contiene la línea coincidente. El nombre del archivo no se imprime si la solicitud fue explícitamente para un solo archivo, o si se busca la entrada canalizada o la entrada redirigida. Cuando se imprime, el nombre del archivo siempre incluirá cualquier información de ruta proporcionada. Se agregará información adicional de ruta si se utiliza la opción /S. La ruta de acceso impresa siempre es relativa a la ruta proporcionada, o relativa al directorio actual si no se proporciona ninguna.,

Nota – el prefijo de nombre de archivo se puede evitar al buscar varios archivos mediante el uso de los comodines no estándar (y mal documentados) < y >. Las reglas exactas de cómo funcionan estos comodines se pueden encontrar aquí. Finalmente, puede ver este ejemplo de cómo funcionan los comodines no estándar con FINDSTR.

lineNumber: = el número de línea de la línea correspondiente representado como un valor decimal con 1 representando la 1ra línea de la entrada. Solo se imprime si se especifica la opción /N.,

lineOffset: = el desplazamiento de bytes decimales del inicio de la línea correspondiente, con 0 representando el carácter 1 de la línea 1. Solo se imprime si se especifica la opción /O. Este no es el desplazamiento del partido dentro de la línea. Es el número de bytes desde el principio del archivo al principio de la línea.

texto = La representación binaria de la coincidencia de la línea, incluyendo cualquier <CR> y/o <LF>., Nada queda fuera de la salida binaria, de modo que este ejemplo que coincide con todas las líneas producirá una copia binaria exacta del archivo original.

FINDSTR "^" FILE >FILE_COPY

la opción / A establece el color de la salida fileName:, lineNumber: y lineOffset: solamente. El texto de la línea coincidente siempre se muestra con el color actual de la consola. La opción / a solo tiene efecto cuando la salida se muestra directamente en la consola. La opción / A no tiene efecto si la salida se redirige a un archivo o se canaliza., Ver la edición 2018-08-18 en la respuesta de Aacini para una descripción del comportamiento defectuoso cuando la salida se redirige a CON.

la mayoría de los caracteres de control y muchos caracteres ASCII extendidos se muestran como puntos en XP
FINDSTR en XP muestra la mayoría de los caracteres de control no imprimibles de las líneas coincidentes como puntos (puntos) en la pantalla. Los siguientes caracteres de control son excepciones; se muestran como ellos mismos: 0x09 Tab, 0x0A LineFeed, 0x0b Tab Vertical, 0x0c Form Feed, 0x0d Carriage Return.

XP FINDSTR también convierte un número de caracteres ASCII extendidos en puntos también., Los caracteres ASCII extendidos que se muestran como puntos en XP son los mismos que los que se transforman cuando se suministran en la línea de comandos. Vea la sección» Límites de caracteres para parámetros de línea de comandos – transformación ASCII extendida», más adelante en este post

los caracteres de Control y ASCII extendida no se convierten en puntos en XP si la salida se canaliza, se redirige a un archivo o dentro de una cláusula FOR IN ().

Vista y Windows 7 siempre muestran todos los caracteres como ellos mismos, nunca como puntos.,

Return Codes (ERRORLEVEL)

  • 0 (success)
    • La coincidencia se encontró en al menos una línea de al menos un archivo.
  • 1 (fallo)
    • No se encontró ninguna coincidencia en ninguna línea de ningún archivo.,iv id=»b01f5d4aef»>, /D:, o /G:
    • archivo especificado por /F:file o /G:file no encontrado
  • 255 (error)
    • demasiados términos de clase de caracteres de expresión regular
      ver límite de término de clase de caracteres regex y error en la parte 2 de la respuesta

fuente de datos para buscar (actualizada en base a pruebas con Windows 7)
Findstr puede buscar datos de solo una de las siguientes fuentes:

  • la opción /F:file.,

  • stdin via redirection findstr "searchString" <file

  • data stream from a pipe type file | findstr "searchString"

Los argumentos/opciones tienen prioridad sobre la redirección, que tiene prioridad sobre los datos canalizados.

los argumentos de nombre de archivo y /F:file pueden combinarse. Se pueden usar varios argumentos de nombre de archivo. Si se especifican varias opciones /F:file, solo se utilizará la última. Los comodines están permitidos en los argumentos de nombre de archivo, pero no dentro del archivo apuntado por /F:file.,

fuente de cadenas de búsqueda (actualizada en base a pruebas con Windows 7)
las opciones /G:file y /C:string pueden combinarse. Se pueden especificar múltiples opciones /C:string. Si se especifican varias opciones /G:file, solo se utilizará la última. Si se usa /G:file o /C:string, se asume que todos los argumentos que no son opciones son archivos a buscar., Si no se usa /G:file ni /C:string, entonces el primer argumento que no es una opción se trata como una lista delimitada por espacios de términos de búsqueda.los nombres de archivo

no deben citarse dentro del archivo cuando se utiliza la opción /F:FILE.
Los nombres de archivo pueden contener espacios y otros caracteres especiales. La mayoría de los comandos requieren que se citen dichos nombres de archivo. Pero la opción FINDSTR /F:files.txt requiere que los nombres de archivo dentro de los archivos.txt no debe ser citado. El archivo no se encontrará si el nombre está entre comillas.

BUG – Short 8.,3 los nombres de archivo pueden romper las opciones /D y /S
Al igual que con todos los comandos de Windows, FINDSTR intentará hacer coincidir tanto el nombre largo como el nombre corto 8.3 cuando busque archivos para buscar. Supongamos que la carpeta actual contiene los siguientes archivos no vacíos:

b1.txtb.txt2c.txt

el siguiente comando encontrará correctamente los 3 archivos:

findstr /m "^" *.txt

b.txt2 coincide porque el nombre corto correspondiente B9F64~1.TXT coincide., Esto es consistente con el comportamiento de todos los demás comandos de Windows.

pero un error con las opciones /D y /S hace que los siguientes comandos solo encuentren b1.txt

findstr /m /d:. "^" *.txtfindstr /m /s "^" *.txt

el error evita que b.txt2 de ser encontrado, así como todos los nombres de archivo que ordenan después de b.txt2 dentro del mismo directorio. Se encuentran archivos adicionales que ordenan antes, como a.txt., Los archivos adicionales que se ordenan más tarde, como d.txt, se pierden una vez que se ha activado el error.

cada directorio buscado se trata de forma independiente. Por ejemplo, la opción /S comenzaría con éxito la búsqueda en una carpeta secundaria después de no encontrar archivos en la carpeta principal, pero una vez que el error Causa que se pierda un nombre de archivo corto en la carpeta secundaria, también se perderán todos los archivos posteriores en esa carpeta secundaria.

los comandos funcionan sin errores si se crean los mismos nombres de archivo en un equipo que tiene deshabilitada la generación de nombres NTFS 8.3., De curso b.txt2 no se encuentran, pero c.txt podría encontrarse correctamente.

no todos los nombres cortos activan el error. Todas las instancias de comportamiento con micrófonos ocultos que he visto involucran una extensión que es más larga que 3 caracteres con un nombre corto 8.3 que comienza igual que un nombre normal que no requiere un nombre 8.3.

el error ha sido confirmado en XP, Vista y Windows 7.,

caracteres no imprimibles y la opción /P la opción /P hace que FINDSTR omita cualquier archivo que contenga cualquiera de los siguientes códigos de bytes decimales:
0-7, 14-25, 27-31.

dicho de otra manera, la opción /P solo omitirá archivos que contengan caracteres de control no imprimibles. Los caracteres de Control son códigos menores o iguales a 31 (0x1F)., FINDSTR trata los siguientes caracteres de control como imprimibles:

 8 0x08 backspace 9 0x09 horizontal tab10 0x0A line feed11 0x0B vertical tab12 0x0C form feed13 0x0D carriage return26 0x1A substitute (end of text)

todos los demás caracteres de control se tratan como no imprimibles, cuya presencia hace que la opción /P omita el archivo.

La entrada canalizada y redirigida puede tener <CR><LF>anexada
si la entrada está canalizada y el último carácter de la secuencia no es <LF>, FINDSTR agregará automáticamente <CR><LF> a la entrada. Esto ha sido confirmado en XP, Vista y Windows 7., (Solía pensar que la tubería de Windows era responsable de modificar la entrada, pero desde entonces he descubierto que FINDSTR está realmente haciendo la modificación.)

lo mismo es cierto para la entrada redirigida en Vista. Si el último carácter de un archivo utilizado como entrada redirigida no es <LF>, FINDSTR añadirá automáticamente <CR><LF> a la entrada. Sin embargo, XP y Windows 7 no alteran la entrada redirigida.

FINDSTR se cuelga en XP y Windows 7 si la entrada redirigida no termina con <LF>
Esta es una» característica » desagradable en XP y Windows 7., Si el último carácter de un archivo utilizado como entrada redirigida no termina con <LF>, FINDSTR se colgará indefinidamente una vez que llegue al final del archivo redirigido.

La última línea de datos canalizados puede ser ignorada si consiste en un solo carácter
si la entrada es canalizada y la última línea consiste en un solo carácter que no es seguido por <LF>, entonces FINDSTR ignora completamente la última línea.,

ejemplo – el primer comando con un solo carácter y no <LF> no coincide, pero el segundo comando con 2 caracteres funciona bien, al igual que el tercer comando que tiene un carácter con la terminación de nueva línea.

> set /p "=x" <nul | findstr "^"> set /p "=xx" <nul | findstr "^"xx> echo x| findstr "^"x

reportado por el usuario de Dosips Sponge Belly en el nuevo bug de findstr. Confirmado en XP, Windows 7 y Windows 8. No he oído hablar de Vista todavía. (Ya no tengo Vista para probar).

sintaxis de opción
Las Letras de opción no distinguen entre mayúsculas y minúsculas, por lo que /i y /I son equivalentes.,

Opciones se pueden prefijar con / o -Opciones pueden ser concatenados después de una sola / o -. Sin embargo, la lista de opciones concatenadas puede contener como máximo una opción de múltiples caracteres como OFF O F:, y la opción de múltiples caracteres debe ser la última opción de la lista.,

Las siguientes son formas equivalentes de expresar un caso insensible regex búsqueda de cualquier línea que contiene «hola» y «adiós» en cualquier orden

  • /i /r /c:"hello.*goodbye" /c:"goodbye.*hello"

  • -i -r -c:"hello.*goodbye" /c:"goodbye.*hello"

  • /irc:"hello.*goodbye" /c:"goodbye.*hello"

Si una cadena de búsqueda comienza con un / o - literal, entonces el /C o /G opción debe ser utilizado. Gracias a Stephan por reportar esto en un comentario (desde eliminado).,

límites de longitud de cadena de búsqueda
En Vista la longitud máxima permitida para una sola cadena de búsqueda es de 511 bytes. Si alguna cadena de búsqueda excede 511, el resultado es un error FINDSTR: Search string too long. con ERRORLEVEL 2.

cuando se hace una búsqueda de expresión regular, la longitud máxima de la cadena de búsqueda es 254. Una expresión regular con longitud entre 255 y 511 resultará en un error FINDSTR: Out of memory con ERRORLEVEL 2. Una expresión regular length > 511 resulta en el error FINDSTR: Search string too long..,

en Windows XP la longitud de la cadena de búsqueda es aparentemente más corta. Error Findstr: «cadena de búsqueda demasiado larga»: ¿cómo extraer y hacer coincidir la subcadena en el bucle» for»?El límite de XP es de 127 bytes para búsquedas literales y regex.

límites de longitud de línea
Los archivos especificados como argumento de línea de comandos o mediante la opción / F:FILE no tienen límite de longitud de línea conocido. Las búsquedas se ejecutaron con éxito contra un archivo de 128 MB que no contenía un solo <LF>.

Los datos canalizados y la entrada redirigida están limitados a 8191 bytes por línea., Este límite es una «característica» de FINDSTR. No es inherente a las tuberías o redirección. FINDSTR usando STDIN redirigido o entrada canalizada nunca coincidirá con ninguna línea que sea > = 8K bytes. Lines > = 8k genera un mensaje de error a stderr, pero ERRORLEVEL sigue siendo 0 si la cadena de búsqueda se encuentra en al menos una línea de al menos un archivo.

tipo de búsqueda predeterminado: Literal vs Expresión Regular
/C:"string" – el valor predeterminado es / L literal. Combinar explícitamente la opción /L con /C:» string » ciertamente funciona, pero es redundante.,

"string argument" – El valor predeterminado depende del contenido de la primera cadena de búsqueda. (Recuerde que <space> se usa para delimitar cadenas de búsqueda.) Si la primera cadena de búsqueda es una expresión regular válida que contiene al menos un meta-carácter sin escape, entonces todas las cadenas de búsqueda se tratan como expresiones regulares. De lo contrario, todas las cadenas de búsqueda se tratan como literales., Por ejemplo, "51.4 200" se tratará como dos expresiones regulares porque la primera cadena contiene un punto sin escape, mientras que "200 51.4" se tratará como dos literales porque la primera cadena no contiene ningún meta-carácter.

/G:file – El valor predeterminado depende del contenido de la primera línea no vacía en el archivo. Si la primera cadena de búsqueda es una expresión regular válida que contiene al menos un meta-carácter sin escape, entonces todas las cadenas de búsqueda se tratan como expresiones regulares., De lo contrario, todas las cadenas de búsqueda se tratan como literales.

recomendación-siempre especifique explícitamente /Lopción literal o /Ropción de expresión regular cuando use "string argument"o /G:file.

error – especificar múltiples cadenas de búsqueda literales puede dar resultados no confiables

el siguiente ejemplo simple de FINDSTR no puede encontrar una coincidencia, aunque debería.

echo ffffaaa|findstr /l "ffffaaa faffaffddd"

Este error se ha confirmado en Windows Server 2003, Windows XP, Vista y Windows 7.,

basado en experimentos, FINDSTR puede fallar si se cumplen todas las siguientes condiciones:

  • La búsqueda está utilizando múltiples cadenas de búsqueda literales
  • Las cadenas de búsqueda son de diferentes longitudes
  • Una cadena de búsqueda corta tiene cierta cantidad de superposición con una cadena de búsqueda más larga
  • La búsqueda distingue entre mayúsculas y minúsculas (no /I opción)

en cada fallo que he visto, siempre es una de las cadenas de búsqueda más cortas que falla.

para obtener más información, consulte ¿Por qué este ejemplo de FINDSTR con múltiples cadenas de búsqueda literales no encuentra una coincidencia?,

comillas y barras invertidas dentro de los argumentos de la línea de comandos
Nota: los comentarios del usuario MC ND reflejan las reglas horriblemente complicadas para esta sección. Hay 3 fases de análisis distintas involucradas:

  • Primer cmd.,exe puede requerir que algunas comillas se escapen como ^» (realmente nada que ver con FINDSTR)
  • Next FINDSTR usa el analizador de argumentos MS C/C++ pre 2008, que tiene reglas especiales para » y \
  • Después de que el analizador de argumentos termine, FINDSTR también trata \ seguido de un carácter alfanumérico como literal, pero \ seguido de un carácter no alfanumérico como un carácter de escape

el resto de esta sección resaltada no es 100% correcto. Puede servir como guía para muchas situaciones, pero las reglas anteriores son necesarias para una comprensión total.,

salir de Comillas dentro de las cadenas de búsqueda de la línea de comandos
Las comillas dentro de las cadenas de búsqueda de la línea de comandos deben escaparse con una barra invertida como\". Esto es cierto para cadenas de búsqueda literales y regex. Esta información ha sido confirmada En XP, Vista y Windows 7.

Nota: La cita también puede necesitar escaparse para el CMD.EXE parser, pero esto no tiene nada que ver con FINDSTR., Por ejemplo, para buscar una cita única, puede usar:

FINDSTR \^" file && echo found || echo not found

escapar de la barra invertida dentro de las cadenas de búsqueda literal de la línea de comandos
la barra invertida en una cadena de búsqueda literal normalmente se puede representar como\o como \\. Son típicamente equivalentes. (Puede haber casos inusuales en Vista donde la barra invertida siempre debe escaparse, pero no tengo una máquina Vista para probar).

pero hay algunos casos especiales:

al buscar barras invertidas consecutivas, todas menos la última deben ser capturadas., La última barra invertida puede escaparse opcionalmente.

  • \\ puede ser codificado como \\\ o \\\\
  • \\\ puede ser codificado como \\\\\ o \\\\\\

Búsqueda de una o más barras invertidas antes de una cita es extraño. Logic sugeriría que la cita debe ser escapada, y cada una de las barras leadingbacklashes tendría que ser escapada, pero esto no funciona!, En su lugar,cada una de las barras invertidas iniciales debe tener doble escape, y las citas escapadas normalmente:

  • \" debe codificarse como \\\\\"
  • \\" debe codificarse como \\\\\\\\\"

como se señaló anteriormente, una o más comillas escapadas también pueden requerir escapar con ^ para el analizador de CMD

la información de esta sección se ha confirmado en XP y Windows 7.,

escape de barra invertida dentro de las cadenas de búsqueda de expresiones regulares de la línea de comandos

  • Vista only: la barra invertida en una expresión regular debe ser de escape doble como \\\\, o de escape único dentro de un conjunto de clases de caracteres como

  • XP y Windows 7: barra invertida una expresión regular siempre se puede representar como . Normalmente se puede representar como \\. Pero esto nunca funciona si la barra invertida precede a una cita escapada.,la cita aped debe ser bedouble escaped, o bien codificada como

    • \" puede codificarse como \\\\\" o \"
    • \\" puede codificarse como \\\\\\\\\" o \" o \\\"

escape de Comillas y barras invertidas dentro de las cadenas de búsqueda literal de /G:file
Las comillas y barras invertidas independientes dentro de un archivo de cadena de búsqueda literal especificado por /G:file no necesitan escaparse, pero pueden hacerlo.,

" y \" son equivalentes.

\ y \\ son equivalentes.

si la intención es buscar \\, entonces al menos la barra invertida inicial debe ser escapada. Ambos \\\ y \\\\ trabajo.

si la intención es buscar», entonces al menos la barra invertida inicial debe escaparse. Ambos \\" y \\\" trabajo.,

Escaping Quote and Backslash within / G:FILE regex search strings
Este es el único caso en el que las secuencias de escape funcionan como se espera Según la documentación. Quote no es un metacarácter regex, por lo que no necesita ser escapado (pero puede ser). La barra invertida es un metacarácter regex, por lo que debe ser escapado.

límites de caracteres para parámetros de línea de comandos – transformación ASCII extendida
el carácter nulo (0x00) no puede aparecer en ninguna cadena de la línea de comandos. Cualquier otro carácter de byte puede aparecer en la cadena (0x01-0xFF)., Sin embargo, FINDSTR convierte muchos caracteres ASCII extendidos que encuentra dentro de los parámetros de la línea de comandos en otros caracteres. Esto tiene un impacto importante de dos maneras:

  1. muchos caracteres ASCII extendidos no coincidirán si se usan como una cadena de búsqueda en la línea de comandos. Esta limitación es la misma para las búsquedas literales y regex. Si una cadena de búsqueda debe contener ASCII extendida, entonces se debe usar la opción /G:FILE en su lugar.

  2. FINDSTR puede no encontrar un archivo si el nombre contiene caracteres ASCII extendidos y el nombre del archivo se especifica en la línea de comandos., Si un archivo a buscar contiene ASCII extendido en el nombre, entonces se debe usar la opción /F:FILE en su lugar.

Aquí hay una lista completa de transformaciones de caracteres ASCII extendidas que FINDSTR realiza en cadenas de línea de comandos. Cada carácter se representa como el valor de código de byte decimal. El primer código representa el carácter proporcionado en la línea de comandos, y el segundo código representa el carácter en el que se transforma. Nota – Esta lista fue compilada en una máquina estadounidense. No sé qué impacto pueden tener otros idiomas en esta lista.,

158 treated as 080 199 treated as 221 226 treated as 071169 treated as 170 200 treated as 043 227 treated as 112176 treated as 221 201 treated as 043 228 treated as 083177 treated as 221 202 treated as 045 229 treated as 115178 treated as 221 203 treated as 045 231 treated as 116179 treated as 221 204 treated as 221 232 treated as 070180 treated as 221 205 treated as 045 233 treated as 084181 treated as 221 206 treated as 043 234 treated as 079182 treated as 221 207 treated as 045 235 treated as 100183 treated as 043 208 treated as 045 236 treated as 056184 treated as 043 209 treated as 045 237 treated as 102185 treated as 221 210 treated as 045 238 treated as 101186 treated as 221 211 treated as 043 239 treated as 110187 treated as 043 212 treated as 043 240 treated as 061188 treated as 043 213 treated as 043 242 treated as 061189 treated as 043 214 treated as 043 243 treated as 061190 treated as 043 215 treated as 043 244 treated as 040191 treated as 043 216 treated as 043 245 treated as 041192 treated as 043 217 treated as 043 247 treated as 126193 treated as 045 218 treated as 043 249 treated as 250194 treated as 045 219 treated as 221 251 treated as 118195 treated as 043 220 treated as 095 252 treated as 110196 treated as 045 222 treated as 221 254 treated as 221197 treated as 043 223 treated as 095198 treated as 221 224 treated as 097

Cualquier carácter >0 no en la lista de arriba es tratada como sí, por ejemplo <CR> y <LF>. La forma más fácil de incluir caracteres impares como <CR> y <LF> es introducirlos en una variable de entorno y utilizar la expansión retardada dentro del argumento de línea de comandos.,

límites de caracteres para las cadenas que se encuentran en los archivos especificados por /G: FILE y / f:FILE options
el carácter nul (0x00) puede aparecer en el archivo, pero funciona como el terminador de cadena C. Cualquier carácter después de un carácter nul se trata como una cadena diferente como si estuvieran en otra línea.

los caracteres <CR> y <LF> se tratan como terminadores de línea que terminan una cadena y no se incluyen en la cadena.

Todos los demás caracteres de un solo byte se incluyen perfectamente dentro de una cadena.,

buscar archivos Unicode
FINDSTR no puede buscar correctamente la mayoría de Unicode (UTF-16, UTF-16LE, UTF-16BE, UTF-32) porque no puede buscar bytes nul y Unicode normalmente contiene muchos bytes nul.

sin embargo, el comando TYPE convierte UTF-16LE con BOM a un conjunto de caracteres de un solo byte, por lo que un comando como el siguiente funcionará con UTF-16LE con BOM.

type unicode.txt|findstr "search"

tenga en cuenta que los puntos de código Unicode que no son compatibles con su página de código activa se convertirán en caracteres ?.,

es posible buscar en UTF-8 siempre que su cadena de búsqueda contenga solo ASCII. Sin embargo, la salida de consola de cualquier carácter UTF-8 multi-byte no será correcta. Pero si redirige la salida a un archivo, entonces el resultado será correctamente codificado UTF-8. Tenga en cuenta que si el archivo UTF-8 contiene una lista de materiales, entonces la lista de materiales se considerará como parte de la primera línea, lo que podría descartar una búsqueda que coincida con el comienzo de una línea.

es posible buscar caracteres UTF-8 de varios bytes si coloca su cadena de búsqueda en un archivo de búsqueda codificado en UTF-8 (sin BOM)y utiliza la opción / G.,

fin de línea
FINDSTR rompe las líneas inmediatamente después de cada <LF>. La presencia o ausencia de <CR> no tiene ningún impacto en los saltos de línea.

buscando a través de saltos de línea
Como se esperaba, el metacaracter regex . no coincidirá con <CR> o <LF>. Pero es posible buscar a través de un salto de línea usando una cadena de búsqueda de línea de comandos., Tanto en el <CR> y <LF> caracteres deben estar emparejados de forma explícita. Si se encuentra una coincidencia de varias líneas, solo se imprime la 1ª línea de la coincidencia. FINDSTR luego se duplica a la 2ª línea en la fuente y comienza la búsqueda de nuevo – una especie de «mirar hacia adelante» tipo característica.

asumir texto.,TXT tiene estos contenidos (podría ser estilo Unix o Windows)

AAABAA

entonces este script

DA estos resultados

1:A2:A5:A

buscar entre saltos de línea usando la opción /G:FILE es impreciso porque la única manera de coincidir <CR> or <LF> es a través de una expresión de rango de clase de caracteres regex que empareja los caracteres EOL.,

  • matches <LF>, but it also matches <TAB> and <0x0B>

  • matches <CR>, but it also matches <0x0C> and !

Note – the above are symbolic representations of the regex byte stream since I can’t graphically represent the characters.,

La respuesta continúa en la parte 2 a continuación…

Articles

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *