如何在PowerShell的.txt文件中验证字符串是否不存在?

jv4diomz  于 2022-11-10  发布在  Shell
关注(0)|答案(1)|浏览(147)

我有10个.txt文件,所有这些文件都有以01、02、03、04等两位数字开头的行或记录。诸若此类。

File1.txt

01,333,abc,test2,44,55
02,883,def,test5,33,093
03....and so on.

1.现在,如果PowerShell发现一个文件不包含以“01”或“02”开头的记录,那么我想抛出一个错误或异常。
1.另外,如果有这样的文件,我不想将无效格式的文件复制到输出文件夹。我只想修改和复制带有01或02的txt文件。
我怎么能这样做呢?

Get-ChildItem -Path 'C:\InputFiles\'-Filter '*.txt' -File | ForEach-Object { 
        $file = $_.FullName
        $FileData = Get-Content $file

        if($FileData[01] -notlike "01,"){
        Write-Host $file "File is INVALID"

        }

 $data = switch -Regex -File $file {
        '^01,' {
             do stuff...

        }

        '^02,' {

           do stuff...
        }

        default {$_}
    } 

    }

  $data | Set-Content -Path $file -Force 
        Copy-Item -Path $file -Destination 'C:\OutputFiles\' -Force
iaqfqrcu

iaqfqrcu1#

做到这一点的一种方法可能是

Get-ChildItem -Path 'C:\InputFiles\'-Filter '*.txt' -File | ForEach-Object { 
    $isValid = $true
    switch -Regex -File $_.FullName {
        '^0[12],' { <# line begins with '01' or '02', so it's OK; do nothing #> }
        default   { $isValid = $false; break } 
    }
    if ($isValid) {
        # modify the file where you need and copy to the destination folder 
    }
    else {
        Write-Error "File $($_.FullName) is INVALID"
    }
}

或者不使用正则表达式:

Get-ChildItem -Path 'C:\InputFiles\'-Filter '*.txt' -File | ForEach-Object { 
    $isValid = $true
    foreach ($line in (Get-Content -Path $_.FullName)) {
        if ($line -notlike '01,*' -and $line -notlike '02,*') {
            $isValid = $false 
            break
        }
    }   
    if ($isValid) {
        # modify the file where you need and copy to the destination folder 
    }
    else {
        Write-Error "File $($_.FullName) is INVALID"
    }
}

相关问题