在Textfile中找到特定的字符串 - Powershell

Gat*_*rde 9 powershell

我知道这个问题可能是一个"新人问题",但我可能犯了一个逻辑错误.

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

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

Bas*_*sie 18

我想这就是你要做的事情:

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

if ($SEL -ne $null)
{
    echo Contains String
}
else
{
    echo Not Contains String
}
Run Code Online (Sandbox Code Playgroud)

在您的示例中,您正在定义一个被调用的字符串$SEL,然后检查它是否等于$null(当然总是要求值false,因为您定义的字符串不是$null!)

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

C:\Temp\File.txt:1:Test
Run Code Online (Sandbox Code Playgroud)

因此,请确保您切换-eq-ne或交换你if/else周围的命令,因为当前正在呼应Contains String时,$SELIS $null,这是倒退.

检查SS64在解释和有用的例子一切PowerShellcmd


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

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

但是这并没有给出文件存在于文件中的位置的指示.此方法的工作方式也不同,因为您首先获取文件的内容Get-Content,因此如果您需要在检查字符串存在后对这些包含执行其他操作,这可能很有用.


Esp*_*o57 6

像这样修改您的报价字符串,并使用simplematch来不使用正则表达式搜索,使用-Quiet来返回布尔值并且不要在所有文件中搜索(更好的性能)

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

  • 请说明错误的原因,原因和解决方法。对于OP来说,这将是一个很好的学习点。 (4认同)