Вопрос по – Тест Powershell, если папка пуста

49

В Powershell, как проверить, является ли каталог пустым?

Кто бы ни понизил голосование, не прокомментировал почему. Upvoting. SpellingD
@SpellingD: Хотелось бы, чтобы так было постоянно. :) Neolisk

Ваш Ответ

12   ответов
1
#################################################
# Script to verify if any files exist in the Monitor Folder
# Author Vikas Sukhija 
# Co-Authored Greg Rojas
# Date 6/23/16
#################################################


################Define Variables############ 
$email1 = "[email protected]" 
$fromadd = "[email protected]" 
$smtpserver ="mailrelay.conoso.com" 

$date1 = get-date -Hour 1 -Minute 1 -Second 1
$date2 = get-date -Hour 2 -Minute 2 -Second 2 

###############that needs folder monitoring############################ 


$directory = "C:\Monitor Folder"

$directoryInfo = Get-ChildItem $directory | Measure-Object
$directoryInfo.count


if($directoryInfo.Count -gt '0') 
{ 

#SMTP Relay address 
$msg = new-object Net.Mail.MailMessage
$smtp = new-object Net.Mail.SmtpClient($smtpServer) 

#Mail sender 
$msg.From = $fromadd 
#mail recipient 
$msg.To.Add($email1) 
$msg.Subject = "WARNING : There are " + $directoryInfo.count + " file(s) on " + $env:computername +  " in " + " $directory 
$msg.Body = "On " + $env:computername + " files have been discovered in the " + $directory + " folder."
$smtp.Send($msg) 

} 

Else
      { 
    Write-host "No files here" -foregroundcolor Green 
      } 
Извините и спасибо, Майкл
Хотя я, безусловно, хочу побудить вас публиковать в StackOverflow, G, есть несколько «лучших практик». что вы игнорируете, умышленно или нет. (а) Как правило, вы не должны просто отправлять код без объяснения причин. (б) Вы не должны повторно публиковать тот же ответ, который дал кто-то другой (ваш был дан как минимум дважды, если вы прокрутите ответы здесь). (c) Вы не должны включать в себя целую кучу несвязанного кода - 90% вашего кода не имеет отношения к заданному вопросу. Я не собираюсь понижать голос, но просто хотел, чтобы вы были готовы на случай, если вы увидите, что приходят некоторые отрицательные голоса.
1
    $contents = Get-ChildItem -Path "C:\New folder"
    if($contents.length -eq "") #If the folder is empty, Get-ChileItem returns empty string
    {
        Remove-Item "C:\New folder"
        echo "Empty folder. Deleted folder"
    }
    else{
    echo "Folder not empty"
    }
1

Пример удаления пустой папки:

IF ((Get-ChildItem "$env:SystemDrive\test" | Measure-Object).Count -eq 0) {
    remove-Item "$env:SystemDrive\test" -force
}
Error: User Rate Limit ExceededStack Overflow is an English site.
46

Если вас не интересуют скрытые или системные файлы, вы также можете использовать Test-Path

Чтобы увидеть, существует ли файл в каталоге.\temp ты можешь использовать :

Test-Path -Path .\temp\*

или в ближайшее время:

Test-Path .\temp\*
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededTest-Path .\temp\*Error: User Rate Limit Exceeded-Path).
Error: User Rate Limit Exceededanything?
Error: User Rate Limit ExceededmostError: User Rate Limit Exceeded
3
filter Test-DirectoryEmpty {
    [bool](Get-ChildItem $_\* -Force)
}
Почему !! ? Спасибо за объяснение!
40

Попробуй это...

$directoryInfo = Get-ChildItem C:\temp | Measure-Object
$directoryInfo.count #Returns the count of all of the files in the directory

Если$directoryInfo.count -eq 0, тогда ваш каталог пуст.

gciError: User Rate Limit Exceeded-forceError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded-forceError: User Rate Limit Exceededdesktop.iniError: User Rate Limit Exceeded
1
#Define Folder Path to assess and delete
$Folder = "C:\Temp\Stuff"

#Delete All Empty Subfolders in a Parent Folder
Get-ChildItem -Path $Folder -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse

#Delete Parent Folder if empty
If((Get-ChildItem -Path $Folder -force | Select-Object -First 1 | Measure-Object).Count -eq 0) {Remove-Item -Path $CATSFolder -Force -Recurse}
1

Простой подход

if (-Not (Test-Path .\temp*) 
{
 #do your stuff here
} 

вы можете удалить-Not если вы хотите, введите «если» когда файлы присутствуют

9

Чтобы предотвратить перечисление каждого файла в c: \ Temp (что может занять много времени), мы можем сделать что-то вроде этого:

if((Get-ChildItem c:\temp\ -force | Select-Object -First 1 | Measure-Object).Count -eq 0)
{
   # folder is empty
}
Error: User Rate Limit Exceeded(Get-ChildItem -LiteralPath 'S:\Test\' -File -Force | Select-Object -First 1 | Measure-Object).Count -ne 0Error: User Rate Limit ExceededTest-Path 'S:\Test\*' -PathType Leaf.
3

Одна линия:

if( (Get-ChildItem C:\temp | Measure-Object).Count -eq 0)
{
    #Folder Empty
}
1

Просто добавляя в JPBlanc, если путь к каталогу равен $ DirPath, этот код также работает для путей, включающих символы в квадратных скобках.

    # Make square bracket non-wild card char with back ticks
    $DirPathDirty = $DirPath.Replace('[', '`[')
    $DirPathDirty = $DirPathDirty.Replace(']', '`]')

    if (Test-Path -Path "$DirPathDirty\*") {
            # Code for directory not empty
    }
    else {
            # Code for empty directory
    }
1

Получение всех файлов и каталогов и подсчет их только для определения того, является ли каталог пустым. Намного лучше использовать .NETEnumerateFileSystemInfos

$directory = Get-Item -Path "c:\temp"
if (!($directory.EnumerateFileSystemInfos() | select -First 1))
{
    "empty"
}

Похожие вопросы