2016-12-27 2 views
1

Я боролся с этим весь день. Я пытаюсь удалить любые файлы в данном каталоге, если имена файлов соответствуют слову в списке CSV.Удалить элементы в каталоге, если filename соответствует словам из CSV

Я импортировал CSV-список в качестве текста, затем попытался совместить слова с именами файлов в целевом каталоге, однако я не уверен, какой оператор использовать или как это сделать. Очевидно, что «Матч» не является командлетом.

#store csv file as variable 

$CSVList = Get-content -Delimiter (',') -path "C:\Users\Leeds TX 11\Desktop\Test folder\Watchfolder\DAZN Production Numbers - purgelist.csv" 

write-host $CSVList 

#delete if word matches .csv entry 

$targetdirectory = "C:\Users\Leeds TX 11\Desktop\Test folder\AVMedia" 
$Files = Get-childItem $targetdirectory | Match ("\w") $CSVList | remove-item -whatif 
write-host $Files 

ответ

1

Просто добавьте Where-Object в трубу, где проверить ли Name свойство -In$CSVList:

# ... 
$Files = Get-ChildItem $targetdirectory | Where-Object Name -In $CSVList | Remove-Item -whatif 

Примечание: Я считаю, что имена файлов в вашей CSV содержит расширение файла. Если нет, вы хотите изменить Where-Object Name на Where-Object BaseName.


Редактировать. Поскольку вы используете PowerShell версии 2, вы должны использовать -contains и поменять местами переменные:

$Files = Get-ChildItem $targetdirectory | Where-Object {$CSVList -contains $_.BaseName} | Remove-Item -whatif 
+0

Спасибо Мартину, попробовал этот метод уже, однако дает следующее сообщение об ошибке: – user6705306

+0

'Where-Object: Невозможно связать параметр 'FilterScript'. Невозможно преобразовать значение «BaseName» типа «System.String», чтобы ввести «System.Management.Automation.ScriptBlock». В строке: 10 символов: 55 + $ Файлы = Get-childItem $ targetdirectory | Где-Object <<<< BaseName -В $ CSVList + CategoryInfo: InvalidArgument: (:) [Where-Object], ParameterBindingExce ption + FullyQualifiedErrorId: CannotConvertArgumentNoMessage, Microsoft.PowerShell.Comma nds.WhereObjectCommand' – user6705306

+0

Какая версия PowerShell ты используешь? –

0

попробовать что-то вроде этого

#store csv file as variable and take first column 
$CSVList = (import-csv "c:\temp\missing.csv" -Header col1).col1 


#delete if word matches .csv entry 
$targetdirectory = "C:\temp2" 
$Files = Get-childItem $targetdirectory -Recurse | Where-Object {$CSVList -contains $_.BaseName } | remove-item -whatif 
write-host $Files 
+0

неожиданный токен 'в' – user6705306

+0

'GetFileNameWithoutExtension' не требуется, поскольку существует свойство' BaseName'. Также '-in' не поддерживается в PowerShell V2 .... –

+0

, потому что он находится в v2 – Esperento57

Смежные вопросы