Как найти подстроку, возвращенную из функции PowerShell с помощью команды SET в командном файле? - PullRequest
0 голосов
/ 13 сентября 2018

Я вызвал функцию .ps1 в пакетном файле и присвоил результат переменной $Value:

for /f "delims=" %%a in ('powershell -ExecutionPolicy Bypass .\test.ps1 -TargetGroupArn "arn:aws:elasticloadbalancing:eu-west-1:570226278193:targetgroup/whocms-uat/cc28ab2765d2503c" -TargetId "i-01fab6896b4efa925" -state "healthy" -timeout 240') do Set "$Value=%%a"

При проверке с помощью echo выводится правильный результат: 09/13/2018 16:34:34 : healthy

Echo Value received from PowerShell : %$Value%

Но я не могу проверить, содержит ли результат подстроку:

set str1=%Value%
if not x%str1:healthy=%==x%str1% echo It contains healthy

1 Ответ

0 голосов
/ 13 сентября 2018

Решение довольно простое:

if not "%$Value:healthy=%" == "%$Value%" echo It contains healthy

Двойные кавычки вокруг двух строковых аргументов между оператором == приводят к интерпретации всего между " как буквенных символов как IF .В противном случае пробел внутри строки значения интерпретируется как разделитель аргументов.

IF включает двойные кавычки при сравнении двух строк.Это означает, что при использовании "..." для одного аргумента, "..." также должен использоваться для другого аргумента, так как в противном случае две сравниваемые строки никогда не будут равны.

Для получения более подробной информации о том, как IF сравнение строк или целых чисел. См. ответ на Символ, эквивалентный NEQ, LSS, GTR и т. д. в пакетных файлах Windows .

PS: $ не имеет специального значения для командного процессора Windows наиспользуется в имени переменной среды.Он интерпретируется как буквальный символ, как буква.

...