Подсчитайте количество файлов в каталоге, а также количество папок - PullRequest
1 голос
/ 03 октября 2019

В настоящее время я могу экспортировать список в текстовый файл и разделить их по имени общего ресурса. У меня вопрос: я хочу иметь возможность подсчитать количество файлов в каталоге, а также количество папок в отдельном текстовом файле.

Я хотел бы сделать в этом формате для текстового файла,$hostname-$sharename-count.txt

Например:

Мой желаемый результат:

1000    #Folder count
150     #File count

Вот что у меня есть:

$outputDir = 'C:\Output'
$Shares    = Get-WmiObject Win32_Share -Filter "not name like '%$'"

$re = ($Shares | ForEach-Object {[Regex]::Escape($_.Path)}) -join '|'
foreach ($Share in $Shares) {
    $result  = (Get-ChildItem -Path $Share.Path -File -Recurse | Select-Object -Expand FullName) -replace "^($re)\\"
    # output the results per share in a text file
    $fileOut = Join-Path -Path $outputDir -ChildPath ('{0}-{1}.txt' -f $env:COMPUTERNAME, $Share.Name)
    $result | Out-File -FilePath $fileOut -Force
}

Ответы [ 3 ]

2 голосов
/ 04 октября 2019

Вы можете просто развернуть код, который у вас есть, как показано ниже:

$outputDir = 'C:\Output'
$Shares    = Get-WmiObject Win32_Share -Filter "not name like '%$'"

$re = ($Shares | ForEach-Object {[Regex]::Escape($_.Path)}) -join '|'
foreach ($Share in $Shares) {
    $files   = (Get-ChildItem -Path $Share.Path -File -Recurse | Select-Object -Expand FullName) -replace "^($re)\\"
    # output the list of files per share in a text file
    $fileOut = Join-Path -Path $outputDir -ChildPath ('{0}-{1}.txt' -f $env:COMPUTERNAME, $Share.Name)
    $files | Out-File -FilePath $fileOut -Force

    # output the count results for files and folders per share in a text file
    $folders = Get-ChildItem -Path $Share.Path -Directory -Recurse
    $content = 'Folders: {0}{1}Files:   {2}' -f $folders.Count, [Environment]::NewLine, $files.Count
    $fileOut = Join-Path -Path $outputDir -ChildPath ('{0}-{1}-count.txt' -f $env:COMPUTERNAME, $Share.Name)
    $content | Out-File -FilePath $fileOut -Force
}

PS Вы можете добавить переключатель -Force в командлет Get-ChildItem, чтобы также получить список скрытых или системных файлов, есливнутри общих папок есть такие файлы

0 голосов
/ 04 октября 2019

Вы можете сделать это всего за одну строку кода Get-ChildItem | Measure-Object -Property Mode

Свойство Mode из Get-ChildItem сообщает вам, получаете ли вы папки, файлы или другие данные.

Выможно также использовать get-help Measure-Object -Examples, чтобы проверить некоторые полезные примеры измерения файлов и папок

0 голосов
/ 03 октября 2019

Если вы просто хотите получить счет, вы можете сделать что-то вроде этого:

$resultForFiles  = (Get-ChildItem -Path $Share.Path -File -Recurse | Select-Object -Expand FullName)
$resultForFolders  = (Get-ChildItem -Path $Share.Path -Directory -Recurse | Select-Object -Expand FullName)
$resultForFiles.Count | Out-File "Path" -Append
$resultForFolders.Count | Out-File "Path" -Append

Переключатель -File для Get-ChildItem будет получать только файлы, а -Directory - только папки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...