Удалить файлы, определенные в массиве с помощью Powershell - PullRequest
5 голосов
/ 13 октября 2010

Можно ли определить массив имен файлов (все файлы в разных папках), а затем в цикле удалить их все или сделать что-то еще?

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

Ответы [ 2 ]

6 голосов
/ 13 октября 2010

Удалить массив имен файлов просто:

Remove-Item foo.txt,c:\temp\bar.txt,baz\baz.txt

Или через переменную:

$files = 'foo.txt','c:\temp\bar.txt','baz\baz.txt'
Remove-Item $files

А затем на основе всех файлов в разных папках:

$folders = 'C:\temp','C:\users\joe\foo'
Get-ChildItem $folders -r | Where {!$_.PSIsContainer} | Remove-Item -WhatIf

Удалите -WhatIf, чтобы сделать фактическое удаление.

Если вы хотите удалить файл с определенным именем, вы можете использовать параметр -Filter в Get-ChildItem. Это был бы самый эффективный подход:

$folders = 'C:\temp','C:\users\joe\foo'
Get-ChildItem $folders -r -filter foo.bak | Remove-Item -WhatIf

Если имя требует более сложного соответствия, тогда вы можете использовать регулярное выражение в блоке скриптов Where, например:

$folders = 'C:\temp','C:\users\joe\foo'
Get-ChildItem $folders -r | Where {$_.Name -match 'f\d+.bak$'} | 
                            Remove-Item -WhatIf
1 голос
/ 14 октября 2010

что-то вроде этого должно работать: сейчас не могу проверить, извините

$filenames = @('filename1.txt', 'filename2.txt', 'filename3.txt')

foreach($file in $filenames)
{
   #GCI recursive to find all instances of this filename
   $filesToDelete = Get-ChildItem -R | where {$_.Name -eq $file}

   foreach($f in $filesToDelete)
   {
      #delete the file that matches, etc. here
      # just using Write-Host to echo out the name for now
      Write-Host $f.Name
   }

}

Как и в большинстве PowerShell, вы действительно можете сжать это, но хотите расширить для объяснения.

Вы можете расширить это, чтобы соответствовать вашим потребностям. Например, если вам нужны все файлы, содержащие слово «delete», вы можете сделать gci | где {$ _. Имя-как " $ file "}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...