我正在尝试编写一个PowerShell,它会查看文件夹中最近的10个文件。然后,我想查看每个文件并删除基于文件名超过7或8个逗号的行
目前我的脚本正在创建空文件?
我之前从未体验过Powershell,所以我对此非常陌生。
$Directory = "C:\Users\sys\time\realter"
$RecentFiles = Get-ChildItem -Path $Directory | Sort-Object LastAccessTime -Descending | Select-Object -First 10
$regex = ',';
foreach ($file in $RecentFiles) {
if ($file.name.StartsWith("DL")) {
Content $file | Where{$regex.matches($_).count -gt 7} | Out-File C:\Users\sys\time\realter\NewFiles\$file.name
} else {
Content $file | Where{$regex.matches($_).count -gt 8} | Out-File C:\Users\sys\time\realter\NewFiles\$file.name
}
}
以下是数据示例,第3行格式错误,包含8个逗号,因此需要删除。
15607085,google,690,DEN,9,Mouse,developer,FT
15607186,yahoo,e9e,DEN,9,Mouse,developer,PT
15607196,outlook,34d,DEN,9,Mouse,de,veloper,FT
15607252,google,b90,DEN,9,Mouse,developer,FT
应该成为
15607085,google,690,DEN,9,Mouse,developer,FT
15607186,yahoo,e9e,DEN,9,Mouse,developer,PT
15607252,google,b90,DEN,9,Mouse,developer,FT
我需要更新或替换原始文件,我一直在单独的文件夹中进行测试
答案 0 :(得分:0)
我找到了一个解决方案,而不是计算由该字符和计数分割的字符的出现次数。这产生了所需的输出。
foreach ($file in $RecentFiles) {
if ($file.name.StartsWith("DL")) {
Get-Content $file.pspath | Where{$_.Split(",").GetUpperBound(0) -lt 7} | Out-File "$NewDir $file"
}
}
答案 1 :(得分:-1)
如果您刚刚开始使用Power Shell编写脚本,我认为该脚本编写得非常好。据我所知,你真的没有一行代码,它告诉程序输出什么。您只需计算它并检查新文件。也许用if语句来试试吧。然后你就可以告诉它究竟需要将它粘贴到新文件而不是管道中,这只需要你得到的东西。
希望对您有所帮助,但如果您对如何做到这一点有任何疑问,可以给我回信。