0

下面脚本的目的是在特定文件夹中搜索给定的字符串。脚本不会出错。但结果并不正确。

如果搜索是单独完成的,搜索一个字符串就可以了。一旦在循环中运行脚本,如果在至少 1 个文件中找到该字符串,我将获得包含该字符串的文件的正确输出。

问题是当代码在循环中运行并且字符串没有出现在任何文件中时,脚本会返回一堆不存在字符串的文件。如果我单独运行字符串,我不会得到正确的结果。

我设置 FileOut = $null 以防在设置之前可能只需要清除此变量但仍然是相同的问题

$a = Get-Date
write-Host $a

$SearchStrings = Get-Content "C:\Users\Someuser\Desktop\DataDumps_PS\Delete_input_2.txt"

$out_file = "C:\Users\Someuser\Desktop\DataDumps_PS\Delete5_$(get-date -f yyyyMMdd).txt"

$RootString = "E:\SSIS_packages\"

Foreach($SearchString in $SearchStrings){

Write-host $SearchString

$FileOut = $null
                                        
$FileOut = Get-ChildItem $RootString -recurse | Select-String -pattern $SearchString | group 
path | Select-Object name,@{name="SearchString"; expression={ 
$SearchString.replace('[','').replace(']','')} } 

$FileOut | Out-file -width 300 -filepath $out_file -append
}

带有循环的相同输出,此字符串“DELETE FROM dbo.PRE_GPS_Upload_Status”在输出下方返回。哪个是错的

Name                                                                                  SearchString                          
----                                                                                  ------------                          
E:\SSIS_packages\ENRL_ETL\EWQ_APP\File_Extract_GPS_Fallouts.dtsx                   DELETE FROM  dbo.PRE_GPS_Upload_Status
E:\SSIS_packages\ENRL_ETL\SNP_YearlyVerification\File_Resub_Req_File_Extract.dtsx DELETE FROM  dbo.PRE_GPS_Upload_Status
E:\SSIS_packages\ETL_PNDT\File_GPS_Data_Pull.dtsx                                 DELETE FROM  dbo.PRE_GPS_Upload_Status
E:\SSIS_packages\ETL_PNDT\File_GPS_Data_Pull_06072021.dtsx                        DELETE FROM  dbo.PRE_GPS_Upload_Status
E:\SSIS_packages\ETL_PNDT\File_GPS_Data_Pull_09092019.dtsx                        DELETE FROM  dbo.PRE_GPS_Upload_Status
E:\SSIS_packages\ETL_PNDT\File_GPS_Data_Pull_09232021.dtsx                        DELETE FROM  dbo.PRE_GPS_Upload_Status
E:\SSIS_packages\ETL_PNDT\File_GPS_Data_Pull_11162020.dtsx                        DELETE FROM  dbo.PRE_GPS_Upload_Status
E:\SSIS_packages\ETL_PNDT\Backup\File_GPS_Data_Pull_06.03.2019.dtsx               DELETE FROM  dbo.PRE_GPS_Upload_Status
E:\SSIS_packages\ETL_PNDT\Backup\File_GPS_Data_Pull_4.2.2019.dtsx                 DELETE FROM  dbo.PRE_GPS_Upload_Status
E:\SSIS_packages\ETL_PNDT\Backup_10112019\File_GPS_Data_Pull_10112019.dtsx        DELETE FROM  dbo.PRE_GPS_Upload_Status

仅搜索 1 个字符串的示例输出(这是正确的输出)

Name                                                                                  SearchString                          
----                                                                                  ------------

对这种行为有什么想法吗?

4

1 回答 1

2

Select-String -pattern $SearchString很可能会受到责备。因为-pattern使用正则表达式进行匹配,它可能会看到那些大括号 [ ],并匹配文件中的某些内容。尝试换掉-pattern.-SimpleMatch

于 2021-10-01T17:53:51.517 回答