|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Добавить прогресс бар в готовый скрипт |
|
||||
|
|
PowerShell - Добавить прогресс бар в готовый скрипт
|
|
Пользователь Сообщения: 122 |
День добрый, есть такой не сложный скрипт который ищет дубликаты файлов в папке
он работает со свичем names, если установить его то он ищет дубликаты по названию файлов (названия файлов многосоставное с разделителем - точка) если без свича то ищет просто по размеру, если у двух файлов совпадает размер или часть имени совпадает то перемещает их в директорию trash\names или trash\size так вот дело в том что скрипт довольно долго работает и я хочу прикрутить к нему не сложный прогресс бар, вроде такого, но у меня это никак не выходит ![]() $totalTimes = 10
$i = 0
for ($i=0;$i -lt $totalTimes; $i++) {
$percentComplete = ($i / $totalTimes) * 100
Write-Progress -Activity 'Doing thing' -Status "Did thing $i times" -PercentComplete $percentComplete
sleep 1
}
А вот сам скрипт поиска дубликатов $RootFolder = "\\server\test"
$WorkFolder = $RootFolder + "\sort"
$TrashFolder = $RootFolder + "\trash"
$LogFile = $RootFolder + "\dups.log"
if (-not(Test-Path $WorkFolder)) { Write-Host "ОШИБКА $WorkFolder не существует" -ForegroundColor red; Return }
if (-not(Test-Path $TrashFolder)) { Write-Host "Создаю $TrashFolder" -ForegroundColor yellow; New-Item -ItemType "directory" -Path $TrashFolder }
Function WriteLog($str, $Color) {
$logstr = ((Get-Date -UFormat "%Y.%m.%d %T") + " " + $str)
$logstr >> $LogFile
Write-Host $logstr -ForegroundColor $Color
}
function DuplicateCandidate([string]$DupsParam) {
$Files = Get-ChildItem -Path $WorkFolder | Where {!$_.PsIsContainter -and $_.BaseName -match "\."}
$arr = foreach($i in $Files) {
$files | Where {$_.Name -ne $i.Name} | Where {
if ($DupsParam -eq "names") {
(Compare-Object $_.BaseName.Split(".") $i.BaseName.Split(".") -IncludeEqual -ExcludeDifferent).Count -ge 4
} else {
$files | Where {$_.Name -ne $File.Name} | Where { $_.Length -eq $File.Length}
}
}
}
if ($DupsParam -eq "names") {
Return ($arr | Select -Uniq)
} else {
if (Test-Path $arr.FullName) {
if (-not(Test-Path ($TrashFolder + "\" + $arr.Name))) {
$arr | % { WriteLog "Переместил $_ в Корзину" "green" }
Move-Item -Path $arr.FullName -Destination $TrashFolder -WhatIf
}
}
}
}
function GetDuplicates([string]$DupsParam) {
WriteLog "---------------------------------------------------------------------------------" "yellow"
WriteLog "Ищем дубликаты" "yellow"
$FindDups = DuplicateCandidate $DupsParam
if (($FindDups).count -eq 0 ) {
WriteLog "--------------------------" "green"
WriteLog "Дубликаты не найдены" "green"
} else {
WriteLog "--------------------------" "yellow"
($FindDups).Name | sort -Descending | % {WriteLog "$_" "yellow" }
}
}
GetDuplicates "Names"
|
|
|
Отправлено: 21:10, 12-06-2018 |
|
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать внутрь foreach добавить итератор и вызвать Write-Progress, примерно так:
Но это очень неэффективная реализация: нет смысла внутри цикла пробегать по всем файлам, нужно только по оставшимся. |
|
Последний раз редактировалось Busla, 13-06-2018 в 10:09. Причина: было одинаковое имя переменной у разных сущностей Отправлено: 22:04, 12-06-2018 | #2 |
|
Пользователь Сообщения: 122
|
Профиль | Отправить PM | Цитировать Busla, Пытался так сделать он считает обращение файла к каждому получается тысячи тысяч в прогрессе
Возможно необходимо эту часть кода как-то переписать? |
|
Отправлено: 00:02, 13-06-2018 | #3 |
|
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать c4uran, я неверно "скрестил" два ваших примеру - у вас уже используется переменная $i, исправил
в остальном - вы что-то перепутали в своих экспериментах, тысячам тысяч взяться просто неоткуда Цитата c4uran:
|
|
|
Отправлено: 10:06, 13-06-2018 | #4 |
|
Пользователь Сообщения: 122
|
Профиль | Отправить PM | Цитировать Busla, Дело не в похожих переменных, разумеется я их переименовал, подскажите пожалуйста как необходимо переписать эту часть кода, как еще сравнивать имена файлов у меня просто нет даже идей
|
|
|
Отправлено: 23:13, 13-06-2018 | #5 |
|
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать c4uran, он же подсказал:
Цитата Busla:
|
|
|
Отправлено: 01:03, 14-06-2018 | #6 |
|
Пользователь Сообщения: 122
|
Профиль | Отправить PM | Цитировать Iska, ну я понял, поэтому прошу что бы подсказали какая должна быть логика скрипта, если эта не подходит...
|
|
Отправлено: 08:34, 14-06-2018 | #7 |
|
Crazy Сообщения: 1235
|
Профиль | Отправить PM | Цитировать Цитата c4uran:
Вот это вот: Цитата c4uran:
Цитата c4uran:
В общем, условия уточнить требуется, чтобы получить помощь с решением... Ну и примеры файлов, было бы неплохо привести... дубликаты, уникальные и т.п. |
|||
|
------- Отправлено: 09:32, 14-06-2018 | #8 |
|
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать YuS_2, как бы по коду понятно, что и как оно сравнивает
Цитата c4uran:
Цитата c4uran:
Взяли первый файл, сравнили с файлами со второго по последний Взяли второй файл, сравнили с файлами с третьего по последний - ведь первый вы уже проверяли и т.д. Так скрипт будет делать уже в два раза меньше работы. Ну а поскольку вам на выходе нужен просто список дубликатов - уже найденные дубликаты можно вообще исключить из дальнейшего сравнения. Но тут уже не всё тривиально. |
||
|
Отправлено: 11:02, 14-06-2018 | #9 |
|
Crazy Сообщения: 1235
|
Профиль | Отправить PM | Цитировать Цитата Busla:
![]() Тем более, скрипт поправлялся от момента публикации... |
|
|
------- Отправлено: 12:02, 14-06-2018 | #10 |
|
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| CMD/BAT - Помогите прикрутить прогресс бар к скрипту | Виктор_Падий@vk | Скриптовые языки администрирования Windows | 4 | 13-11-2016 14:44 | |
| Добавить прогресс бар к скрипту | support23 | AutoIt | 1 | 25-11-2012 06:53 | |
| [решено] Прогресс-бар для скрипта | Tosyk | AutoIt | 10 | 23-09-2012 11:04 | |
| VBS/WSH/JS - [решено] Прогресс бар для vbscript | neo21 | Скриптовые языки администрирования Windows | 2 | 27-10-2011 13:31 | |
| [решено] Прогресс бар | semiono | AutoIt | 17 | 24-03-2009 23:18 | |
|