2010-04-14 11 views
8

1) Esiste un dispositivo integrato che possa dirmi se il contenuto di una variabile contiene solo lettere maiuscole?2 domande stringa batch

2) c'è un modo per vedere se una variabile contiene una stringa? Ad esempio, mi piacerebbe vedere se la variabile% PATH% contiene Ruby.

risposta

15

Per la parte 1, findstr è la risposta. Si può solo utilizzare la funzione regex 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 

E 'importante in questo caso che fare non hanno uno spazio tra il echo %xxokay% e il carattere pipe |, dal momento che si tradurrà in un essere uscita spazio che non è uno dei tuoi caratteri accettabili.


Da parte 2, findstr è anche la risposta (/i è ignorare caso che può essere ciò che si desidera - lasciare fuori se caso deve corrispondere):

> 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 

È quindi possibile utilizzare:

if %errorlevel%==1 goto :label 

per modificare il comportamento del copione in entrambi i casi.

Ad esempio, il segmento di codice per il controllo rubino potrebbe essere qualcosa di simile:

: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

questa non è una soluzione batch (cmd.exe), ma un'alternativa più facile utilizzando VBScript, che di default è già installato sul tuo 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 

Salva il file come myscript.vbs ed eseguirlo come questo

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 

utilizzando batch (cmd.exe) per la manipolazione di stringhe è l'ultima cosa che si vorrebbe fare, a meno che non si è assolutamente limitato. Altrimenti, utilizzare lo strumento più appropriato per il lavoro.