脚本以递归方式从子路径中删除特定文件?

时间:2014-03-22 18:55:45

标签: file powershell recursion vbscript

我已经尝试了一段时间来寻找这个答案,但似乎无法找到我想要的东西。也许我的写法很奇怪。

我需要一个脚本,它会递归删除网络共享中每个子目录中的特定文件。

例如:

\\\share\\*\a\b\file.settings

*代表 n 子目录的数量。路径的其余部分将始终相同。看起来我可以在Powershell中使用Get-childitemremove-item的组合来完成此操作,但是我无法找到我需要的确切命令。

任何帮助都会非常感激!感谢。

3 个答案:

答案 0 :(得分:5)

这样的事情应该有效:

Get-ChildItem '\\server\share' -Recurse | ? {
  $_.FullName -like '*\a\b\file.settings'
} | Remove-Item

如果您只对.\a\b\file.settings的直接子文件夹中的文件\\server\share感兴趣,可以将代码简化为以下内容:

Get-ChildItem '\\server\share\*\a\b\file.settings' | Remove-Item

答案 1 :(得分:1)

虽然我无法与Powershell合作,但我放在一起的下面的VBS似乎运作良好:

Set FSfolder = FSO.GetFolder(\\server\share)

For Each subfolder In FSfolder.SubFolders

    UserProfile=subfolder.Name
    SettingFile="\\server\share\" & UserProfile & "\a\b\file.settings"
    If FSO.FileExists(SettingFile) Then
        FSO.DeleteFile(SettingFile)
    End If

Next 

答案 2 :(得分:1)

将我的评论代码分解为长格式:

$folders = Get-ChildItem "\\server\share\" -Directory

ForEach ($folder in $folders) {
    $file = Join-Path $folder.FullName "\a\b\file.settings"
    if (Test-Path $file) { Remove-Item $file } 
}