1)是否有任何内置可以告诉我变量的内容是否只包含大写字母?
2)有没有办法查看变量是否包含字符串?例如,我想看看变量%PATH%是否包含Ruby。
答案 0 :(得分: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
在这种情况下,重要的是你 not 在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检查的代码段可能类似于:
: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 :(得分: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)进行字符串操作是您要做的最后一件事,除非您受到绝对限制。否则,请使用更合适的工具。