У меня есть список имен файлов в текстовом файле как это:
f1.txt
f2
f3.jpg
Как я удаляю все остальное из папки кроме этих файлов в Powershell?
Псевдокод:
Данные:
-- begin exclusions.txt --
a.txt
b.txt
c.txt
-- end --
Код:
# read all exclusions into a string array
$exclusions = Get-Content .\exclusions.txt
dir -rec *.* | Where-Object {
$exclusions -notcontains $_.name } | `
Remove-Item -WhatIf
Удалите переключатель -WhatIf
, если Вы довольны результатами. -WhatIf
показывает, что он будет делать (т.е. не удалит)
-Oisin
.Если файлы существуют в текущей папке, то вы можете сделать следующее:
Get-ChildItem -exclude (gc exclusions.txt) | Remove-Item -whatif
Этот подход предполагает, что каждый файл находится в отдельной строке. Если файлы существуют в подкаталогах, то я бы выбрал подход Oisin
.на самом деле это, похоже, работает только для первого каталога, а не для рекурсии - мой измененный скрипт рекурсирует правильно.
$exclusions = Get-Content .\exclusions.txt
dir -rec | where-object {-not($exclusions -contains [io.path]::GetFileName($_))} | `
where-object {-not($_ -is [system.IO.directoryInfo])} | remove-item -whatif