Powershell - 删除包含X个指定字符的行

时间:2018-02-14 12:33:13

标签: powershell csv

我正在尝试编写一个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

我需要更新或替换原始文件,我一直在单独的文件夹中进行测试

2 个答案:

答案 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语句来试试吧。然后你就可以告诉它究竟需要将它粘贴到新文件而不是管道中,这只需要你得到的东西。

希望对您有所帮助,但如果您对如何做到这一点有任何疑问,可以给我回信。

  • CERESIA