|
Компьютерный форум 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 Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата c4uran:
Вот это вот: Цитата c4uran:
Цитата c4uran:
В общем, условия уточнить требуется, чтобы получить помощь с решением... Ну и примеры файлов, было бы неплохо привести... дубликаты, уникальные и т.п. |
|||
------- Отправлено: 09:32, 14-06-2018 | #8 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать YuS_2, как бы по коду понятно, что и как оно сравнивает
Цитата c4uran:
Цитата c4uran:
Взяли первый файл, сравнили с файлами со второго по последний Взяли второй файл, сравнили с файлами с третьего по последний - ведь первый вы уже проверяли и т.д. Так скрипт будет делать уже в два раза меньше работы. Ну а поскольку вам на выходе нужен просто список дубликатов - уже найденные дубликаты можно вообще исключить из дальнейшего сравнения. Но тут уже не всё тривиально. |
||
Отправлено: 11:02, 14-06-2018 | #9 |
Crazy Сообщения: 1218
|
Профиль | Отправить 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 |
|