我在一个文件夹中有一组.txt
个文件。例如:
1.txt
2.txt
3.txt
这些包含文件名后面的日期。例如,1.txt
可能包含:
06/11/2017 randomdocument.txt
06/12/2017 otherdocument.txt
07/11/2017 yadocument.txt
01/02/2017 randomdocument.txt
我想:
我的代码完成了第一部分。我已尝试过各种迭代,第二部分没有雪茄。任何帮助将不胜感激。
代码
Set-Location c:\users\john.smith\desktop\FORREPORT
$files = Get-ChildItem -recurse
$SearchPattern = "0[5,6]{1}/[0-9]\w{1,2}/2017"
Foreach ($file in $files) {
$line = Get-ChildItem -recurse | Get-Content | Select-String $SearchPattern
$d = $line | Select-Object file.FullName
$d | Add-Content -path c:\users\john.smith\desktop\ohsnap.txt
}
期望输出:
06/12/2017 randomdocument.txt in c:\users\john.smith\desktop\FORREPORT\1.txt
答案 0 :(得分:0)
对代码进行最少的更改:
Set-Location c:\users\john.smith\desktop\FORREPORT
$files = Get-ChildItem -recurse
$SearchPattern = "0[5,6]{1}/[0-9]\w{1,2}/2017"
Foreach ($file in $files) {
$lines = Get-Content $file | Select-String $SearchPattern
if($lines){
foreach($line in $lines){
"$line`t$($file.FullName)" | Add-Content -path c:\users\john.smith\desktop\ohsnap.txt
}
}
}
这将在新文档的新行上打印每一行。如果您想在一行中找到所有匹配的行,请删除foreach
:
Set-Location c:\users\john.smith\desktop\FORREPORT
$files = Get-ChildItem -recurse
$SearchPattern = "0[5,6]{1}/[0-9]\w{1,2}/2017"
Foreach ($file in $files) {
$lines = Get-Content $file | Select-String $SearchPattern
if($lines){
"$lines`t$($file.FullName)" | Add-Content -path c:\users\john.smith\desktop\ohsnap.txt
}
}
如果还要检查是否确实找到了匹配的行,那么只有$file.Fullname
的{{1}}输出为$lines
为空。
PS您的问题和代码是我能想到使用this quote的最佳示例。听从了! ;-p 子>