我知道这个问题可能是一个"新人问题",但我可能犯了一个逻辑错误.
我有一个文本文件,我想搜索它是否包含字符串.我尝试了如下所示,但它不起作用:
$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在解释和有用的例子一切PowerShell和cmd
检查文件中是否存在字符串的另一种方法是:
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,因此如果您需要在检查字符串存在后对这些包含执行其他操作,这可能很有用.
像这样修改您的报价字符串,并使用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)
| 归档时间: |
|
| 查看次数: |
41522 次 |
| 最近记录: |