下面脚本的目的是在特定文件夹中搜索给定的字符串。脚本不会出错。但结果并不正确。
如果搜索是单独完成的,搜索一个字符串就可以了。一旦在循环中运行脚本,如果在至少 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
---- ------------
对这种行为有什么想法吗?