我有一个问题,我必须清除文件夹, 文件夹的名称大多数时候都是格式化的,我在 powershell 中编写了一个脚本来做到这一点。 但我明白,即使我这样做:
Get-ChildItem -Path $array[2] -Recurse -Directory
该命令将检查每个文件夹中的每个项目,即使它不是文件夹,这会导致需要几个小时才能获取每个文件夹路径。
我应该如何做才能使其按时执行?
这是脚本的一部分
foreach ($line in Get-Content ".\Exe-Purge-directories.txt") {
$array = $line.Split("|")
$deleteType = $array[0]
$sdate = [int]$array[1] * -1 # nb de jour a retrancher ( nb negatif)
$expiredDate = (Get-Date).AddDays($sdate) # today + date a retrancher
$folders = Get-ChildItem -Path $array[2] -Recurse -Directory -Force -ErrorAction SilentlyContinue
#the line above is the one taking time
$pathException = Get-ChildItem -Path $array[2] -File #-Force #-ErrorAction SilentlyContinue
if ($deleteType.Equals("DateTimeInFolderName")) {
foreach ($folder in $folders) {
if ($folder.Name -match '^\d{4}-\d{2}$')
# .....
我知道的两种方法是通过参数和通过过滤器
Get-ChildItem 有一个名为“-Directory”的参数,该参数应仅列出目录。 DOS 时代的“dir /ad”。
第二个稍慢的选项是使用“PSIsContainer”过滤器将 Get-ChildItem 通过管道传输到Where-Object
Get-ChildItem | Where-Object {$_.PSIsContainer}