2批次字符串问题

时间:2010-04-14 04:46:12

标签: string batch-file

1)是否有任何内置可以告诉我变量的内容是否只包含大写字母?

2)有没有办法查看变量是否包含字符串?例如,我想看看变量%PATH%是否包含Ruby。

2 个答案:

答案 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)进行字符串操作是您要做的最后一件事,除非您受到绝对限制。否则,请使用更合适的工具。