Как получить предыдущие файлы на основе отсутствующих файлов с помощью powershell - PullRequest
0 голосов
/ 29 апреля 2018

Я хочу сравнить мой список массивов (имя файла каждого файла в папке) и файл журнала, который содержит отсутствующие файлы. (например, внутри папки у нас есть 24 файла, скажем, у нас есть 01.csv, 03.csv 04.csv и 06.csv, и отсутствуют файлы 02.csv и 05.csv, что я хочу сделать, чтобы скопировать 01 .csv или 03.csv, если отсутствует файл 02.csv и т. д. и т. д.) Если у вас есть что-нибудь, что упростит задачу. Пожалуйста помоги! Вот мой сценарий, который я до сих пор делал, чтобы случайным образом получать доступные файлы в папке для предоставления отсутствующих файлов.

$folder="D:\ERM\Dump_files\Hourly\RTDEG"
$RTDEG = @("rtdeg_$RTDEG_01", "rtdeg_$RTDEG_02", "rtdeg_$RTDEG_03", 
           "rtdeg_$RTDEG_04", "rtdeg_$RTDEG_05", "rtdeg_$RTDEG_06", 
           "rtdeg_$RTDEG_07", "rtdeg_$RTDEG_08", "rtdeg_$RTDEG_09", 
           "rtdeg_$RTDEG_10", "rtdeg_$RTDEG_11", "rtdeg_$RTDEG_12", 
           "rtdeg_$RTDEG_13", "rtdeg_$RTDEG_14", 
           "rtdeg_$RTDEG_15","rtdeg_$RTDEG_16", 
           "rtdeg_$RTDEG_17", "rtdeg_$RTDEG_18", "rtdeg_$RTDEG_19", 
           "rtdeg_$RTDEG_20", "rtdeg_$RTDEG_21", "rtdeg_$RTDEG_22", 
           "rtdeg_$RTDEG_23", "rtdeg_$RTDEG_24")

 $files = Get-ChildItem $folder -recurse -Exclude "*.txt", "*.log" | 
        Where-Object {($_.CreationTime -gt (Get-Date).adddays(-4))}

 if((Get-ChildItem "D:\ERM\Dump_files\Hourly\RTDEG" -Exclude "*.txt", 
 "*.log" | Measure-Object -line).lines -ge 24){

 echo "Viola! No missing files."

 }else{

 echo "Validating the missing files."

 $files.Basename | Out-File $folder\validation.txt

 $fileRTDEG = $files | ForEach-Object { ($_.BaseName) }

 set-Content $folder\validated.txt -value "Missing"


 Compare-Object $RTDEG $fileRTDEG | select -ExpandProperty InputObject | 
 Out- File $folder\validated.txt -Append ascii

 $compare = import-csv $folder\validated.txt

 foreach($missed in $compare){

 $data = $missed.Missing

 $random = gci $folder -Exclude "*.txt", "*.log" | where {$_.psIsContainer -     
 eq $false}| Resolve-Path | Get-Random -Count 1

 Copy-Item $random -Destination $folder\$data.csv

 }}

Также я хотел сделать цикл для питания массивов. Но я не думаю, что делаю все правильно. вот мой код:

  $RTDEG = @()
  for ($i = 01; $i -le 24; $i ++){
  $date = (Get-Date).adddays(-4).ToString("yyyyMMdd")
  $list = "rtdeg_" + "" + $date + "" + $i.ToString("00")
  Write-Output $RTDEG
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...