Я новичок в написании сценариев, прости меня за любые очевидные ответы здесь.
По сути, у меня есть большой список музыкальных файлов, хранящихся в папке, которую я обновляю каждый месяц. Я создал меньшую папку для тестирования:
У меня есть список CSV всех файлов, которые должны быть в папке:
Я пытаюсь создать скрипт Powershell, который:
- Берет имена столбцов CSV "Путь к аудиофайлу" и сравнивает их с именами файлов в папке "Музыка"
- Проверяет, отсутствуют ли какие-либо файлы в списке CSV или папке Music
- Вывести имена отсутствующих файлов
Мой тестовый скрипт (отредактировано):
$folder = 'C:/Users/Me/Documents'
$myFolder = Get-ChildItem '/Users/Me/Documents/Music'
$myCSV = Import-Csv -Path 'Documents/AudioMissing.csv'| % {$_.'Audio File Path' -replace "\\", ""}
$compare = Compare-Object -ReferenceObject $myCSV -DifferenceObject $myFolder
foreach($y in $compare){
if($y.SideIndicator -eq "=>"){
write-output "$($y.InputObject) Is present in the Music folder but not in the CSV."
}
if($y.SideIndicator -eq "<="){
write-output "$($y.InputObject) Is present in the CSV but not in Music folder."
}
}
За исключением случаев, когда я запускаю сценарий, он возвращает все файлы из списка и папки, а также говорит, что некоторые из них отсутствуют, даже если они имеют одинаковое имя файла.
Вывод выглядит так (отредактировано):
9913SA_FIle1.wav Is present in the Music folder but not in the CSV.
9914SA_File2.wav Is present in the Music folder but not in the CSV.
9915SA_File3.wav Is present in the Music folder but not in the CSV.
9916SA_File4.wav Is present in the Music folder but not in the CSV.
9917SA_File5.wav Is present in the Music folder but not in the CSV.
9913SA_FIle1.wav Is present in the CSV but not in Music folder.
9914SA_File2.wav Is present in the CSV but not in Music folder.
9915SA_File3.wav Is present in the CSV but not in Music folder.
9916SA_File4.wav Is present in the CSV but not in Music folder.
Я хочу, чтобы скрипт выводил только отсутствующие файлы, например:
9917SA_File5.wav Is present in the Music folder but not in the CSV.
Возможно ли это сделать?
EDIT:
Оказывается, у моего CSV-файла действительно были скрытые пробелы в конце каждой записи "Путь к аудиофайлу", в результате чего он читался как другое имя.
Новый код
$myFolder = Get-ChildItem '/Users/Me/Documents/Music' | % {$_.Name}
$myCSV = Import-Csv -Path '/Users/Me/Documents/AudioMissing.csv' | % {$_.'Audio File Path' -replace "\\", ""}
$compare = Compare-Object -ReferenceObject $myCSV -DifferenceObject $myFolder -includeequal
Write-Output "`n_____FOLDER_____`n"
$myFolder
Write-Output "`n_____CSV_____`n"
$myCSV
Write-Output "`n_____COMPARE_____`n"
$compare
Write-Output "`n_____Formatted Results____`n"
foreach($y in $compare){
if($y.SideIndicator -eq "=>"){
write-output "$($y.InputObject) Is present in the Music folder but not in the CSV."
}
if($y.SideIndicator -eq "<="){
write-output "$($y.InputObject) Is present in the CSV but not in Music folder."
}
}
if($y.SideIndicator -eq "=="){
write-output "All files present."
}
Возвращает:
_____FOLDER_____
9913SA_File1.wav
9914SA_File2.wav
9915SA_File3.wav
9916SA_File4.wav
9917SA_File5.wav
_____CSV_____
9913SA_File1.wav
9914SA_File2.wav
9915SA_File3.wav
9916SA_File4.wav
_____COMPARE_____
InputObject SideIndicator
----------- -------------
9913SA_File1.wav ==
9914SA_File2.wav ==
9915SA_File3.wav ==
9916SA_File4.wav ==
9917SA_File5.wav =>
_____Formatted Results____
9917SA_File5.wav Is present in the Music folder but not in the CSV.