问题描述
问题,搜索大量目录/文件以清除10年以上的文件。某些文件夹和文件的名称中带有[]。 即
C:\Temp\Test_Old_Folder\Test [TEST]\Test [TEST].txt
C:\Temp\Test_Old_Folder\Test [TEST]\Test - Copy.txt
我有一个脚本,该脚本将检查上次访问日期,如果访问日期已超过10年,它将删除文件。当前,我们正在使用卷影副本,因此,如果用户在未来两年内需要它,则可以返回并查找文件。
foreach ($File in $FileList) {
Remove-Item -Path $File.FilePath -Force
}
我试图将包含[]的文件/文件夹重命名为其他名称,但是,这也不起作用。我可以手动删除文件/文件夹,但是,如果在整个文件服务器上分布的多个文件夹中有数百个文件/文件夹,这是浪费工时。有没有办法注释掉[]。我知道有些语言可以使用一个`来使以下字符作为字符串读取,而不是操作或任何您想调用的字符。
任何帮助将不胜感激。
解决方法
至少在PowerShell中的路径解析上下文中,字符串[abc]
被解释为通配符模式。它与正则表达式“这些字符中的任何一个”的含义相同。
因此,如果您进行Get-Item -Path 'file[test].txt'
,Get-Item
尝试将其解析为名为filet.txt
,filee.txt
或files.txt
的任何文件。
使用-LiteralPath
参数与提供程序cmdlet一起抑制路径中的通配符扩展:
Remove-Item -LiteralPath $File.FilePath -Force