Сценарий Powershell для удаления файлов, не указанных в списке

У меня есть список имен файлов в текстовом файле как это:

f1.txt
f2
f3.jpg

Как я удаляю все остальное из папки кроме этих файлов в Powershell?

Псевдокод:

  • Считайте текстовый файл линию за линией
  • Создайте список имен файлов
  • Рекурсивно вызовите папку и ее подпапки
  • Если имя файла не находится в списке, удалите его.
11
задан Brian Tompsett - 汤莱恩 6 July 2015 в 11:22
поделиться

3 ответа

Данные:

-- 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

.
17
ответ дан 3 December 2019 в 04:32
поделиться

Если файлы существуют в текущей папке, то вы можете сделать следующее:

Get-ChildItem -exclude (gc exclusions.txt) | Remove-Item -whatif

Этот подход предполагает, что каждый файл находится в отдельной строке. Если файлы существуют в подкаталогах, то я бы выбрал подход Oisin

.
6
ответ дан 3 December 2019 в 04:32
поделиться

на самом деле это, похоже, работает только для первого каталога, а не для рекурсии - мой измененный скрипт рекурсирует правильно.

$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
1
ответ дан 3 December 2019 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: