2017-01-26 2 views
1

Я знаю, что этот вопрос может быть «новым вопросом парня», но я, вероятно, допустил логическую ошибку.Найти конкретную строку в текстовом файле - Powershell

У меня есть текстовый файл, и я хочу выполнить поиск, если он содержит строку или нет. Я попробовал его, как показано ниже, но это не работает:

$SEL = "Select-String -Path C:\Temp\File.txt -Pattern Test" 
if ($SEL -eq $null) 
{ 
    echo Contains String 
} 
else 
{ 
    echo Not Contains String 
} 

ответ

4

я думаю, что это то, что вы пытаетесь сделать:

$SEL = Select-String -Path C:\Temp\File.txt -Pattern "Test" 

if ($SEL -ne $null) 
{ 
    echo Contains String 
} 
else 
{ 
    echo Not Contains String 
} 

в вашем примере, вы определяете строку с именем $SEL, а затем проверка I е равно $null (которые, конечно, всегда будут вычисляться false, потому что строка вы определяете не $null!)

Кроме того, если файл содержит шаблон, он будет возвращать что-то вроде:

C:\Temp\File.txt:1:Test 

Поэтому убедитесь, чтобы переключить ваш -eq в -ne или поменять местами if/else команды вокруг, потому что в настоящее время вы вторя Contains String когда $SEL является $null, что в обратном направлении.

Проверить SS64 для объяснения и полезные примеры для всего в PowerShell и cmd


Другой способ проверки, если существует строка в файле будет:

If (Get-Content C:\Temp\File.txt | %{$_ -match "test"}) 
{ 
    echo Contains String 
} 
else 
{ 
    echo Not Contains String 
} 

, но это не дайте указатель где в файле есть файл. Этот метод также работает по-другому, поскольку вы сначала получаете содержимое файла с Get-Contents, поэтому это может быть полезно, если вам нужно выполнить другие операции над ними, после проверки наличия вашей строки.

+0

Хорошо, что работает для меня Thx :) –

1

изменить вашу кавычку, как это и использовать SimpleMatch для поиска использование регулярных выражений и Dont -QUIET для возвращают логическое И не искать во всем файле (лучше производительность)

if (Select-String -Path C:\Temp\File.txt -Pattern "test" -SimpleMatch -Quiet) 
{ 
echo "Contains String" 
} 
else 
{ 
echo "Not Contains String" 
} 
+2

Пожалуйста, объясните, что было не так, почему и как оно было исправлено. Это было бы хорошей точкой обучения для ОП. – vonPryz

0

Приведенный ниже сценарий будет делать то, что вы хотите:

$SEL = Select-String -Path c:\temp\File.txt -Pattern test 

if($SEL.Length -gt 0) 
{ 
    Write-Host 'Contains String' 
} 
else 
{ 
    Write-Host 'Does not contain String' 
} 

Ваша линия $SEL = "Select-String ..." фактически объявляет $SEL как строка - это не проинструктировать PowerShell для выполнения Select-String.

Смежные вопросы