使用Powershell删除数组中定义的文件

时间:2010-10-13 17:05:01

标签: powershell

是否可以定义文件名数组(不同文件夹中的所有文件),然后在循环中删除所有文件名,或者执行其他操作?

实际上我需要使用mklink创建一些符号链接到一个文件,将这些链接放在不同的文件夹中,如果有的话,替换旧的链接。

2 个答案:

答案 0 :(得分:6)

删除文件名数组很简单:

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 :(得分:1)

这样的事情应该有效: 现在无法测试,抱歉

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