Home > Enterprise >  Get missing file name in a sequence of files
Get missing file name in a sequence of files

Time:04-13

In a folder i have many files, they are sequential, type ABC001.csv,ABC002.csv,ABC003.csv and so on. Sometimes this sequence breaks, then there are missing files and I need to identify which of the sequence are missing in the folder manually, we have more than 700files. Does anyone here know a power shell script to help me with this task?

CodePudding user response:

In this example,

  1. The script is located in the same location as a folder named "Temp".
  2. The "Temp" folder had files ABC001.csv through ABC717.csv.
  3. Files ABC123.csv and ABC555.csv were deleted from "Temp" folder.
for ($i = 1; $i -lt 718; $i  ) {
    $FileName = $PSScriptRoot   '\Temp\ABC{0:d3}.csv' -f $i
    if(-not (Test-Path -Path $FileName -PathType Leaf)) {
        Write-Host "Missing $FileName"
    }
}

Output when ran:

Missing 123
Missing 555

CodePudding user response:

If all files to be counted always have a naming format ABC<3-digit number>.csv, then you could do this:

# get an array of integer sequence numbers from the files
$sequence = (Get-ChildItem -Path 'D:\Test' -Filter 'ABC*.csv' -File).BaseName | 
             Where-Object { $_ -match '(\d{3})$' } | ForEach-Object { [int]$matches[1] } | 
             Sort-Object -Unique

# get the missing numbers (if any) and output filenames to be collected in $missingFiles
$missingFiles = Compare-Object $sequence (1..($sequence[-1])) -PassThru | ForEach-Object {
    'ABC{0:D3}.csv' -f $_  # reconstruct the filename with the missing number
}

# output on screen
if (@($missingFiles).Count) {
    Write-Host "Files missing:" -ForegroundColor Yellow
    $missingFiles
}
else {
    Write-Host "All files are in sequence" -ForegroundColor Green
}

Of course, change the rootpath of the files (here 'D:\Test') to your own

  • Related