开发者

Delete files defined in an array with Powershell

开发者 https://www.devze.com 2023-01-20 01:06 出处:网络
Is it possible to define an array of filenames (all files in different folders) and then in a loop delete them all, or do something else?

Is it possible to define an array of filenames (all files in different folders) and then in a loop delete them all, or do something else?

Actually I need to create a few symbolic links using mklink to one file, putting those links in a different folders, replacing the old links if there wa开发者_开发百科s any.


Deleting an array of filenames is simple:

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

Or via a variable:

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

And then based on all files in different folders:

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

Remove the -WhatIf to do the actual removal.

If you want to delete a file with a specific name you could use the -Filter parameter on Get-ChildItem. This would be the best performing approach:

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

If the name requires more sophisticated matching then you can use a regex in a Where scriptblock e.g.:

$folders = 'C:\temp','C:\users\joe\foo'
Get-ChildItem $folders -r | Where {$_.Name -match 'f\d+.bak$'} | 
                            Remove-Item -WhatIf


something like this should work: can't test right now, sorry

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

}

As with most powershell, you can really compress this, but wanted to extend for explanation.

You could extend this to match your needs. For example if you needed all files that contain the word "delete", you could do gci | where {$_.Name -like "$file"}

0

精彩评论

暂无评论...
验证码 换一张
取 消