string - roben - Lote para encontrar una cadena de combinación de números y letras solo en los primeros 10 caracteres(en un archivo txt) por fila e imprimir toda la fila
desbloquear combinacion 4 digitos bicicleta (4)
Tengo una pregunta sobre el archivo por lotes. Necesito un archivo por lotes que encontrará una cadena de combinación de números y letras solo en las primeras 10 letras por fila (en múltiples archivos .txt) e imprimirá toda la fila en un archivo .txt de salida. Por el momento he estado usando esto:
@echo off
findstr "A1234 B5678" "*.txt"
for /f "delims=" %%A in (''findstr "A1234 B5678" "*.txt"'') do (echo %%A >> OUTPUTFILE.txt)
Entonces, lo que estoy buscando arriba es una combinación de letras A1234 y B5678 (solo un ejemplo) en todos los archivos txt en el directorio e imprimiéndolos en outputfile.txt. Funciona bien, pero necesito mejorar esto un poco. Solo quiero que el lote encuentre esta combinación (A1234 y B5678) en solo las primeras 10 letras por fila e imprima toda la fila en un archivo txt de salida. Por ejemplo, tendríamos varios archivos txt que tendrían en sí mismos líneas como estas:
00 A1234 QWERTZ
AA B5678 ASDFGH
Batch verificaría todos los archivos para la combinación de cadenas A1234 y B5678 e imprimiría toda la fila que tenía esa combinación en ellas.
Espero que me entiendan, porque mi inglés no es el mejor. Además, no tengo mucha experiencia en cmd así que, si es posible, hazlo tan fácil (comprensible) como sea posible :).
¡Muchas gracias!
Esto utiliza un archivo de ayuda por lotes llamado findrepl.bat
que es similar a grep pero se ejecuta como un archivo de proceso por lotes simple; se puede encontrar aquí - http://www.dostips.com/forum/viewtopic.php?f=3&t=4697
findrepl.bat usa jscript
en el Windows Scripting Host y funcionará a menos que su administrador de TI haya deshabilitado WSH.
@echo off
for %%a in (*.txt) do (
echo ============="%%a"================>>search
type "%%a"|findrepl "^.. (A1234|B5678)">>search
)
ren search search.txt
Hay otra forma de hacerlo que es un poco más complicada, pero no depende de un código adicional. Corta todos los archivos txt en el directorio actual en líneas. Los primeros 10 caracteres de estas líneas se alimentan en findstr. Si findstr tiene éxito, echos la línea a la consola.
Use el siguiente archivo por lotes:
@echo off
setlocal
for /f "delims=" %%I in (''dir/B *.txt'') do (
for /f "delims=" %%J in (%%I) do (
set "_=%%J"
call echo %%_:~0,10%%|findstr "PATTERN1 PATTERN2"&&call echo %%_%%
)
)
endlocal
goto:eof
Para las grietas: sé que hay ENABLEDELAYEDEXPANSION. Por lo tanto, el estilo de llamada podría evitarse mediante el uso de
setlocal ENABLEDELAYEDEXPANSION
y
echo !_:~0,10!|findstr "PATERN1 PATERN2"&&call echo !_!
Pero considero esto como un mal estilo, porque esto tiende a causar problemas, especialmente si algo que quiere hacer eco incluye ''!'' Así que siempre uso la llamada y el estilo double %% en mis ejemplos, excepto que DELAYEDEXPANSION no se puede evitar.
Si está completamente configurado para usar cmd, puede usar findstr con el indicador de expresión regular de la siguiente manera:
C:/>type test.txt
00 A1234 QWERTZ
AA B5678 ASDFGH
BB A1234 B5678
00 A1234 QWERTZ
AA B5678 ASDFGH
BB A1234 B5678
00 A1234 QWERTZ
AA B5678 ASDFGH
BB A1234 B5678
00 A1234 QWERTZ
AA B5678 ASDFGH
BB A1234 B5678
00 A1234 QWERTZ
AA B5678 ASDFGH
BB A1234 B5678
00 A1234 QWERTZ
AA B5678 ASDFGH
BB A1234 B5678
00 A1234 QWERTZ
AA B5678 ASDFGH
BB A1234 B5678
C:/>findstr /R "^*[A][0-9]* [B][0-9]*$" test.txt
BB A1234 B5678
BB A1234 B5678
BB A1234 B5678
BB A1234 B5678
BB A1234 B5678
BB A1234 B5678
BB A1234 B5678
- ab1
Si te entendí bien, deseas buscar en los primeros 10 caracteres combinaciones múltiples alfanuméricas específicas. Creo que puedes hacer esto con una expresión regular, pero lamentablemente Findtr no puede manejar patrones alternativos.
findstr /r "(pattern1|pattern2)"
No funciona. Por lo tanto, tiene que expandirse para grep para las ventanas que se pueden encontrar aquí. La sintaxis para n patterns es:
grep -h -E -e "^.. ({PATTERN 1}|{PATTERN 2}|...|{PATTERN 2})" *.txt
Para su ejemplo, puede usar:
grep -h -E -e "^.. (A1234|B5678)" *.txt
busque en cada * .txt cualquier línea que comience con 2 letras al azar seguidas de un espacio seguido por A1234 o B5678 e imprima esta línea. El -h al principio suprime la salida del nombre de archivo de la línea.