2010-04-14 12 views
8

1) ¿Hay alguna función incorporada que me diga si el contenido de una variable solo contiene letras mayúsculas?2 preguntas de cadena por lotes

2) ¿hay alguna forma de ver si una variable contiene una cadena? Por ejemplo, me gustaría ver si la variable% PATH% contiene Ruby.

Respuesta

15

Para la parte 1, findstr es la respuesta. Usted sólo puede usar la característica de expresiones regulares junto con errorlevel:

> set xxokay=ABC 
> set xxbad=AB1C 
> echo %xxokay%|findstr /r "^[A-Z]*$" >nul: 
> echo %errorlevel% 
0 
> echo %xxbad%|findstr /r "^[A-Z]*$" >nul: 
> echo %errorlevel% 
1 

Es importante en este caso que hacer no tienen un espacio entre la echo %xxokay% y el caracter |, ya que dará lugar a un espacio que se emite que no es uno de tus personajes aceptables.


Para la parte 2, findstr es también la respuesta (/i es ignorar caso que puede ser lo que quiera - dejar fuera si el caso debe coincidir):

> set xxruby=somewhere;c:\ruby;somewhere_else 
> set xxnoruby=somewhere;somewhere_else 
> echo %xxruby%|findstr /i ruby >nul: 
> echo %errorlevel% 
0 
> echo %xxnoruby%|findstr /i ruby >nul: 
> echo %errorlevel% 
1 

A continuación, puede utilizar:

if %errorlevel%==1 goto :label 

para cambiar el comportamiento de su secuencia de comandos en ambos casos.

Por ejemplo, el segmento de código para la comprobación de rubí podría ser algo como:

:ruby_check 
    echo %yourvar%|findstr /i ruby >nul: 
    if %errorlevel%==1 goto :ruby_check_not_found 
:ruby_check_found 
    :: ruby was found 
    goto :ruby_check_end 
:ruby_check_not_found: 
    :: ruby was NOT found 
:ruby_check_end 
1

esta no es una solución de proceso por lotes (cmd.exe), pero una alternativa más fácil con VBScript, que por defecto es ya instalado en tu sistema

Set objArgs = WScript.Arguments 
var=objArgs(0) 
check=var 
If check=UCase(var) Then 
    WScript.Echo "String contains all uppercase" 
Else 
    WScript.Echo "String doesn't contain all uppercase" 
End If 
' to check string contains substring 
mystring="This is my ruby string" 
check="ruby" 
If InStr(mystring,check)>0 Then 
    WScript.Echo "string contains ruby" 
End If 

guardar el archivo como myscript.vbs y ejecutarlo como esto

C:\test>cscript //nologo myscript.vbs abC 
String doesn't contain all uppercase 
string contains ruby 

C:\test>cscript //nologo myscript.vbs ABCD 
String contains all uppercase 
string contains ruby 

usando lotes (cmd.exe) para la manipulación de cadenas es lo último que querría hacer, a menos que se limitan en absoluto. De lo contrario, use la herramienta más adecuada para el trabajo.

Cuestiones relacionadas