PowerShell - [решено] Подсчёт количества файлов и отправка сообщения об этом на мэйл c помощью PowerShell

Аватара пользователя
Ololosh

Re: PowerShell - [решено] Подсчёт количества файлов и отправка сообщения об этом на мэйл c помощью PowerShell

Сообщение Ololosh »

Цитата Ololosh:



причём файлы типа xxx2_1.pdf и xxx2_2.pdf - должны считаться как 1 файл.
PowerShell - [решено] Подсчёт количества файлов и отправка сообщения об этом на мэйл c помощью PowerShell




По какому принципу эти (и другие) файлы должны рассматриваться, как один?



У… как я припоздал Изображение
Аватара пользователя
Ololosh

Re: PowerShell - [решено] Подсчёт количества файлов и отправка сообщения об этом на мэйл c помощью PowerShell

Сообщение Ololosh »

Iska, видимо если название до "_*.pdf" соответствует названию другого файла до "_*.pdf" - то их можно считать за один



Foreigner,

простите меня за мою неопытность, но не могли бы подробнее описать, что делается в вашем коде и как его запустить
Аватара пользователя
Ololosh

Re: PowerShell - [решено] Подсчёт количества файлов и отправка сообщения об этом на мэйл c помощью PowerShell

Сообщение Ololosh »

Ololosh, да я понял уже. Пока я рассусоливал, уже спросили, ответ получили и решение на-гора выдали:


Цитата Kazun:





Код:

Код: Выделить всё

$count = @(Get-ChildItem *.pdf | Group {$_.basename.split("_")[0]}).Count

PowerShell - [решено] Подсчёт количества файлов и отправка сообщения об этом на мэйл c помощью PowerShell




Обратите внимание, как изящно сие выглядит (ну, когда знаешь и умеешь-то Изображение).
Аватара пользователя
Ololosh

Re: PowerShell - [решено] Подсчёт количества файлов и отправка сообщения об этом на мэйл c помощью PowerShell

Сообщение Ololosh »

Iska, а не могли бы вы тогда мне объяснить, что происходит в данном ответе и как его использовать, просто мои познания пока не позволяют этого сделать.
Аватара пользователя
Ololosh

Re: PowerShell - [решено] Подсчёт количества файлов и отправка сообщения об этом на мэйл c помощью PowerShell

Сообщение Ololosh »

Ololosh, Прописываете название директории с файлами ( у меня .\test, это относительный путь) и маску файлов (например *.pdf). Если надо рекурсивно , то добавьте ключ -recurse (например $f = gci C:\test *.pdf -recurse). Скрипт выведет кол-во файлов (или групп файлов).



все остальное можно найти в справке:



Код:

Код: Выделить всё

help about_arrays
help about_hash_tables
help about_switch
Аватара пользователя
Ololosh

Re: PowerShell - [решено] Подсчёт количества файлов и отправка сообщения об этом на мэйл c помощью PowerShell

Сообщение Ololosh »

Foreigner,

Ответ он мне вроде выдаёт, только перед этим какую-то ещё ошибку:



Произошла ошибка при вызове метода, так как [System.Collections.Hashtable+KeyCo

llection] не содержит метод с именем "foreach".

строка:16 знак:18

+ ($n.keys).foreach
Аватара пользователя
Iska

Re: PowerShell - [решено] Подсчёт количества файлов и отправка сообщения об этом на мэйл c помощью PowerShell

Сообщение Iska »

Ololosh, PowerShell какой версии?



замените блок с foreach на:



Код:

Код: Выделить всё

$n.keys | % {
	if (($n.$_[0] -replace '.+_(\d)$','$1') -eq 1) { $c++ }
	else { $c += $n.$_.count }
}
Аватара пользователя
Ololosh

Re: PowerShell - [решено] Подсчёт количества файлов и отправка сообщения об этом на мэйл c помощью PowerShell

Сообщение Ololosh »

Iska, я для примера создал txt файлы, но это сути не меняет

$f = gci D:\test\*.txt -recurse



$n = @{}

switch -regex ($f.basename) {



".+_\d+" {



[array] $n.$($_ -replace '_\d+','') += $_



}



default { $c++ }



}



($n.keys).foreach({





if (($n.$_[0] -replace '.+_(\d)$','$1') -eq 1) { $c++ }

else { $c += $n.$_.count }



})



$c
Аватара пользователя
Ololosh

Re: PowerShell - [решено] Подсчёт количества файлов и отправка сообщения об этом на мэйл c помощью PowerShell

Сообщение Ololosh »

Foreigner, версия 2.0

Прошу прощения, но скрипт оказывается не работает, а просто выдаёт числа. При каждом новом запуске скрипт показывает на +1 больше число. Но с заменой на
Цитата Foreigner:



$n.keys | % {

if (($n.$_[0] -replace '.+_(\d)$','$1') -eq 1) { $c++ }

else { $c += $n.$_.count }

}
PowerShell - [решено] Подсчёт количества файлов и отправка сообщения об этом на мэйл c помощью PowerShell




ошибка действительно пропала.



Так по поводу скрипта господина Kazun-a
Цитата Kazun:



$count = @(Get-ChildItem *.pdf | Group {$_.basename.split("_")[0]}).Count
PowerShell - [решено] Подсчёт количества файлов и отправка сообщения об этом на мэйл c помощью PowerShell




Спасибо, скрипт сработал..было не легко, но я понял как его использовать.

Но кто-нибудь может объяснить, что он делает более подробно?
Ответить

Вернуться в «Скриптовые языки администрирования Windows»