2010-04-14 27 views
8

1)是否有任何內置的,可以告訴我,如果一個變量的內容僅包含大寫字母?2批次字符串問題

2)有沒有什麼辦法,看看是否一個變量包含一個字符串?例如,我想看看如果變量%PATH%含有紅寶石。

回答

15

對於部分1,findstr就是答案。你可以用與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 

這是在這種情況下,你做echo %xxokay%和豎線|之間的空間很重要,因爲這將導致空間被輸出這不是你可以接受的角色之一。


對於部分2,findstr也是答案(/i是忽略可能是你想要的情況下 - 離開它,如果情況必須匹配):

> 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 

然後,您可以使用:

if %errorlevel%==1 goto :label 

改變在兩種情況下,你的腳本的行爲。

例如,對於紅寶石校驗代碼段可以是這樣的:

: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

這不是一個批量溶液(cmd.exe的),但使用的VBScript一個更簡單的替代方案中,默認情況下是已安裝在你的系統上。

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 

將文件保存爲myscript.vbs像這樣

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 

使用批處理(CMD.EXE)字符串處理運行它,你會想這樣做,除非你是絕對限制的最後一件事。否則,使用更合適的工具來完成這項工作。