2 групповых вопроса
1) Есть ли какой-нибудь встроенный, который может сказать мне, если содержимое переменной содержит только заглавные буквы?
2) есть ли способ узнать, содержит ли переменная строку? Например, я хотел бы посмотреть, содержит ли переменная%PATH% Ruby.
2 ответа
Для части 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 может выглядеть примерно так:
: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
Это не пакетное решение (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
использование batch(cmd.exe) для работы со строками - последнее, что вы хотели бы сделать, если только вы не ограничены. В противном случае используйте более подходящий инструмент для работы.