Digamos que tengo un texto en una variable llamada $ 1. Ahora quiero verificar si ese $ 1 contiene una cierta cadena. Si contiene una cierta cadena, quiero imprimir un mensaje. La impresión no es el problema, el problema es el cheque ... ideas de cómo hacer eso?¿Buscar una cadena para una subcadena en un archivo por lotes (Windows)?
Respuesta
Por lo que sé, cmd.exe no tiene una función incorporada que responda a su pregunta directamente. Pero hace ayuda reemplazar la operación. Entonces el truco es: en tu $ 1 reemplaza la subcadena que necesitas para probar la presencia con una cadena vacía, luego verifica si $ 1 ha cambiado. Si tiene entonces hizo contienen la subcadena (de lo contrario, la operación de reemplazo no tendría nada que reemplazar en primer lugar!). Ver el código de abajo:
set longString=the variable contating (or not containing) some text
@rem replace xxxxxx with the string you are looking for
set tempStr=%longString:xxxxxx=%
if "%longString%"=="%tempStr%" goto notFound
echo Substring found!
goto end
:notFound
echo Substring not found
:end
Nota: este tipo de búsqueda no distingue entre mayúsculas y minúsculas. También puede tener problemas con los caracteres especiales. Es más robusto cuando se utiliza la expansión retrasada tanto para la búsqueda/reemplazo como para la verificación de igualdad. Pero la cadena de búsqueda no puede contener '=' char, y la cadena de búsqueda no puede comenzar con '~' o '*'. – dbenham
@dbenham: observación absolutamente justa, mi solución está lejos de ser perfecta (como es la sintaxis de cmd, sin embargo). –
El conjunto de búsqueda y reemplazar truco funciona en muchos casos, pero no soporta caso búsquedas de expresiones regulares o sensibles.
Si necesita una búsqueda sensible a mayúsculas o un soporte limitado de expresiones regulares, puede usar FINDSTR.
Para evitar complicaciones de caracteres especiales que se escapan, es mejor si la cadena de búsqueda está en una variable y se accede tanto a la búsqueda como al objetivo a través de la expansión retardada.
Puede canalizar $ 1 en el comando FINDSTR con el comando ECHO. Use ECHO(
en caso de que $ 1 no esté definido, y tenga cuidado de no agregar espacios adicionales. ECHO !$1!
hará eco de ECHO is off.
(u on) si $ 1 no está definido, mientras que ECHO(!$1!
hará eco de una línea en blanco si no está definido.
FINDSTR hará eco de $ 1 si encuentra la cadena de búsqueda; no lo desea, por lo que redirige la salida a nul. FINDSTR establece ERRORLEVEL en 0 si se encuentra la cadena de búsqueda, y 1 si no se encuentra. Eso es lo que se usa para verificar si se encontró la cadena. El &&
y ||
es una sintaxis conveniente utilizar para la prueba de partido (ERRORLEVEL 0) o no partido (ERRORLEVEL no 0)
El soporte expresión regular es rudimentaria, pero sigue siendo útil.
See FINDSTR /? para más información.
Este ejemplo de expresión regular buscará $ 1 para "BEGIN" al comienzo de la cadena, "MID" en cualquier parte en el centro, y "END" al final. La búsqueda es sensible a mayúsculas y minúsculas por defecto.
set "search=^BEGIN.*MID.*END$"
setlocal enableDelayedExpansion
echo(!$1!|findstr /r /c:"!search!" >nul && (
echo FOUND
rem any commands can go here
) || (
echo NOT FOUND
rem any commands can go here
)
La forma más fácil en mi opinión es la siguiente:
set YourString=This is a test
If NOT "%YourString%"=="%YourString:test=%" (
echo Yes
) else (
echo No
)
Basiclly la cadena después de ':' es la cadena que está buscando y que está utilizando no enfrente de la cadena si debido%: * % eliminará * de la cadena, lo que hace que no sean iguales.
Al igual que con [respuesta de Igor] (http://stackoverflow.com/a/8757658/1012053), esta prueba ignora el caso. Además, es más seguro usar expansión retrasada. Finalmente, no se puede usar si la subcadena contiene '='. – dbenham
- 1. Windows script por lotes: cálculo de subcadena
- 2. archivo por lotes: encontrar si es subcadena en la cadena (no en un archivo)
- 3. Buscar subcadena en una cadena usando C#
- 4. Buscar si existe una subcadena en una cadena
- 5. Buscar una subcadena en una cadena en Oracle sin LIKE
- 6. Retire primero y el último carácter de una cadena en un archivo por lotes de Windows
- 7. Reemplazo de subcadena de archivo por lotes utilizando las variables
- 8. ¿Cómo buscar una subcadena en SQLite?
- 9. ¿Cuál es la mejor manera de hacer una subcadena en un archivo por lotes?
- 10. Buscar subcadena en una lista de cadenas
- 11. ¿Prueba una cadena para una subcadena?
- 12. regex para buscar la subcadena
- 13. Incluir un archivo por lotes en un archivo por lotes
- 14. Archivo por lotes para reiniciar un servicio. Windows
- 15. ¿Cómo concatenar cadenas en un archivo por lotes de Windows?
- 16. archivo por lotes de Windows operador &&
- 17. expresiones regulares: Buscar cadena sin subcadena
- 18. Control de psftp en un archivo por lotes de Windows
- 19. ¿Eliminar subcadena de una cadena?
- 20. varios comandos en una sola línea en un archivo por lotes de Windows
- 21. Ejecute el archivo por lotes como un servicio de Windows
- 22. Buscar el índice de última aparición de una subcadena en una cadena
- 23. Redirigir argumentos pasados a un archivo por lotes de Windows
- 24. Compruebe si una cadena contiene una subcadena
- 25. PHP: mejor método para recortar una subcadena de una cadena
- 26. Establecer una variable de entorno del sistema desde un archivo por lotes de Windows?
- 27. Temporizador en el archivo por lotes de Windows
- 28. buscar y reemplazar cadena en un archivo
- 29. Buscar una palabra en una cadena
- 30. Buscar subcadena en cadena pero solo si las palabras completas?
empiece aquí: http://www.dostips.com/DtTipsStringManipulation.php –
¡Gracias! Realmente no ayuda ... Esperaba que haya algo más fácil. ¿Alguna otra idea? – EOB