Как найти подстроку, возвращаемую функцией PowerShell с помощью команды SET в пакетном файле?

Я вызвал функцию .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"

При проверке с помощью эха выводится правильный результат: 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

Вы должны заключить свои сравнения строк в двойные кавычки, чтобы защитить пробелы и специальные символы. if not "x%str1:healthy=%"= = "x%str1%" echo It contains healthy

Squashman 13.09.2018 16:37

Почему вы не можете использовать -match "healthy" в своей команде PowerShell вместо того, чтобы запускать ее в цикле For, сохраняя вывод как переменную, а затем расширяя / заменяя строку в переменной, чтобы определить, была ли она частью вывода?

Compo 13.09.2018 17:47

Следует также отметить, что вы пропустили использование символа доллара с именем переменной в команде set.

Squashman 13.09.2018 18:48

С окружающими кавычками ведущий x больше не нужен для защиты от пустых значений ...

aschipfl 13.09.2018 19:26
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
90
1

Ответы 1

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

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

Двойные кавычки вокруг двух строковых аргументов между оператором == приводят к интерпретации всего, что находится между ", как буквальные символы с помощью ЕСЛИ. В противном случае пробел внутри строки значения интерпретируется как разделитель аргументов.

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

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

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

Другие вопросы по теме