В сценарии DOS есть ли способ проверить, существует ли строка в переменной? - PullRequest
0 голосов
/ 10 января 2012

В сценарии DOS, если у меня есть переменная строка, как я могу получить истину или ложь, что определенная строка существует в этой строке переменной? (Я не хочу создавать временный файл для этого. Я уже знаю, как это сделать.) Для FIND.exe и FINDSTR.exe, похоже, требуется физический файл, а не переменная.

Я попробовал это, но это не удалось:

C:\Users\me>findstr.exe "Program" %ProgramData%

Ответы [ 3 ]

1 голос
/ 10 января 2012

На форуме DOSTIPS нашел другую идею:

set "str=-debug -verbose -normi -homedir -repo"
if "%str:-verbose=%" neq "%str%" (echo -verbose found) else (echo -verbose not found)
1 голос
/ 10 января 2012

Если вы пытаетесь использовать стандартную установку Windows - я не думаю, что это может быть достигнуто, как вы описываете, используя CMD.EXE, так как ближайший вы получите команду IF, но это не так Поддержка содержит, он содержит только следующие операторы:

EQU - equal
NEQ - not equal
LSS - less than
LEQ - less than or equal
GTR - greater than
GEQ - greater than or equal

Если вы можете делать то, что хотите, используя эти операторы (а не только содержимое). Вы также можете использовать команду FOR, чтобы разбить строку и проверить соответствие на каждом отдельном элементе, хотя это кажется довольно хрупким.

Поскольку вы пометили это как PowerShell, я собираюсь выйти из положения и предположить, что решение сценария PowerShell также будет приемлемым. Если это так, то решение довольно просто продемонстрировать:

# create a variable $s with some string data
$s = "Some random program data"

# using String::Contains
if ($s.Contains("random")) { "Bingo" }

# using -like operator
if ($s -like "*random*") { "Bingo" }

# using the -match operator
if ($s -match "random") { "Bingo" }

Примечание. В PowerShell оператор -contains используется для проверки на членство в наборе, а не на совпадение подстрок. Вы захотите использовать метод Contains для строкового объекта или операторы -like или -match для выполнения требуемого сопоставления с шаблоном.

0 голосов
/ 10 января 2012

Вместо

C:\Users\me>findstr.exe "Program" %ProgramData%

try

echo %ProgramData% | findstr Program >nul
set RESULT=%ERRORLEVEL%

Если он совпадает,% ERRORLEVEL% будет 0, в противном случае, 1.

...