Я хочу сравнить мой список массивов (имя файла каждого файла в папке) и файл журнала, который содержит отсутствующие файлы. (например, внутри папки у нас есть 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
}