В Powershell, как я тестирую, если каталог пуст?
Получение количества от Добирается-ChildItem, может обеспечить ложные результаты, потому что пустая папка или ошибка, получающая доступ к папке, могли привести к 0 количествам.
способ, которым я проверяю на пустые папки, состоит в том, чтобы выделить ошибки:
Try { # Test if folder can be scanned
$TestPath = Get-ChildItem $Path -ErrorAction SilentlyContinue -ErrorVariable MsgErrTest -Force | Select-Object -First 1
}
Catch {}
If ($MsgErrTest) { "Error accessing folder" }
Else { # Folder can be accessed or is empty
"Folder can be accessed"
If ([string]::IsNullOrEmpty($TestPath)) { # Folder is empty
" Folder is empty"
}
}
вышеупомянутый код сначала пытается получить доступ к папке. Если ошибка происходит, она производит это, ошибка произошла. Если не было никакой ошибки, заявите, что "К папке можно получить доступ", и затем проверять, пусто ли это.
После изучения некоторых существующих ответов, и экспериментирование немного, я закончил тем, что использовал этот подход:
function Test-Dir-Valid-Empty {
param([string]$dir)
(Test-Path ($dir)) -AND ((Get-ChildItem -att d,h,a $dir).count -eq 0)
}
Это будет первая проверка на действительный каталог (Test-Path ($dir)
). Это затем проверит на любое содержание включая любые каталоги, скрытый файл или "регулярные" файлы ** из-за атрибутов d
, h
, и a
, соответственно.
Использование должно быть достаточно четким:
PS C_\> Test-Dir-Valid-Empty projects\some-folder
False
... или альтернативно:
PS C:\> if(Test-Dir-Valid-Empty projects\some-folder){ "empty!" } else { "Not Empty." }
Not Empty.
<час> ** На самом деле я не на 100% уверен, что определенный эффект a
здесь, но он действительно в любом случае заставляет все файлы быть включенными. Документация указывает, что ah
выставочные скрытые файлы, и я верю as
, должен показать системные файлы, таким образом, я предполагаю a
на своем собственном, просто показывает "регулярные" файлы. При удалении его из функции выше это в любом случае найдет спрятанные файлы, но не других.