代码之家  ›  专栏  ›  技术社区  ›  iLemming

删除在具有Powershell的数组中定义的文件

  •  5
  • iLemming  · 技术社区  · 14 年前

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

    2 回复  |  直到 14 年前
        1
  •  7
  •   Keith Hill    14 年前

    删除文件名数组很简单:

    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脚本块中使用regex,例如:

    $folders = 'C:\temp','C:\users\joe\foo'
    Get-ChildItem $folders -r | Where {$_.Name -match 'f\d+.bak$'} | 
                                Remove-Item -WhatIf
    
        2
  •  1
  •   Taylor Bird    14 年前

    这样的做法应该管用:

    $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”的所有文件,可以在{$\.Name-like $文件 "}