我知道这个问题可能是一个新问题"但我可能犯了一个合乎逻辑的错误。
我有一个文本文件,我想搜索它是否包含字符串。我尝试了如下所示,但它不起作用:
$SEL = "Select-String -Path C:\Temp\File.txt -Pattern Test"
if ($SEL -eq $null)
{
echo Contains String
}
else
{
echo Not Contains String
}
答案 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,了解PowerShell
和cmd
另一种检查文件中是否存在字符串的方法是:
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。因此,如果您只是想测试,那就更快了。另外,它返回包含文本的行,这样可能会有所帮助。