在Textfile中查找特定字符串 - Powershell

时间:2017-01-26 10:13:01

标签: powershell

我知道这个问题可能是一个新问题"但我可能犯了一个合乎逻辑的错误。

我有一个文本文件,我想搜索它是否包含字符串。我尝试了如下所示,但它不起作用:

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

4 个答案:

答案 0 :(得分:15)

我认为这就是你要做的事情:

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

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

在您的示例中,您定义了一个名为$SEL的字符串,然后检查它是否等于$null(当然它总是评估为false,因为您定义的字符串不是$null!)

此外,如果文件包含模式,它将返回如下内容:

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

因此,请确保将-eq切换为-ne或更换if/else命令,因为当Contains String为{$SEL时,您正在回复$null {1}},这是向后的。

检查SS64,了解PowerShellcmd

中所有内容的说明和有用示例

另一种检查文件中是否存在字符串的方法是:

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

但是这并没有给出文本存在的文件中 的标记。此方法的工作方式也不同,因为您首先使用Get-Contents获取文件的内容,因此如果您需要在检查字符串的存在后对这些内容执行其他操作,这可能很有用。

答案 1 :(得分:4)

修改你的引用字符串,并使用simplematch不要使用正则表达式搜索,使用-Quiet返回布尔值,不要在所有文件中搜索(更好的性能)

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

答案 2 :(得分: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

答案 3 :(得分:0)

我遇到了这个问题,但是找到了一个更快的解决方案,用于仅测试字符串是否在文件中。

$SEL = get-content c:\temp\File.txt
if( $SEL -imatch "test" )
{
   Write-Host 'Contains String'
}
else
{
   Write-Host 'Does not contain String'
}

使用带有1Mb文件的Measure-Command,此操作在23ms内完成,选择字符串为44ms。因此,如果您只是想测试,那就更快了。另外,它返回包含文本的行,这样可能会有所帮助。