首页 > 解决方案 > 包含 [ 和/或 ] 的删除项目或重命名项目

问题描述

问题,搜索大量目录/文件以清理超过 10 年的文件。某些文件夹和文件的名称中有 [ ]。IE

C:\Temp\Test_Old_Folder\Test [TEST]\Test [TEST].txt
C:\Temp\Test_Old_Folder\Test [TEST]\Test - Copy.txt

我有一个脚本可以检查最后访问日期,如果访问日期超过 10 年,它将删除文件。目前我们正在使用卷影副本,因此如果用户在未来 2 年内需要它,他们可以返回并找到文件。

foreach ($File in $FileList) {
    Remove-Item -Path $File.FilePath -Force
}

我试图将包含 [ ] 的文件/文件夹重命名为其他名称,但是这也不起作用。我可以手动删除文件/文件夹,但是,如果在文件服务器上分布的多个文件夹中有数百个文件/文件夹,这是浪费工时。有没有办法注释掉[]。我知道在某些语言中,您可以使用单个 ` 将以下字符读取为字符串,而不是操作或任何您想调用的字符。

任何帮助将不胜感激。

标签: powershellbrackets

解决方案


[abc]至少在 PowerShell 中的路径解析上下文中,字符串被解释为通配符模式。它与正则表达式中的含义相同,“这些字符中的任何一个”。

因此,如果您这样做Get-Item -Path 'file[test].txt',请Get-Item尝试将其解析为任何名为filet.txtfilee.txtfiles.txt.

使用-LiteralPath提供程序 cmdlet 的参数来抑制路径中的通配符扩展:

Remove-Item -LiteralPath $File.FilePath -Force

推荐阅读