Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 08.11.2017
Сообщений: 42

Нахождение копий файлов в каталогах

22.02.2020, 13:39. Показов 1145. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть задание: Написать сценарий PowerShell, что находит копии файлов в двух заданных пользователем каталогах. Для каждой такой пары вывести на экран запрос о том, какую копию удалить.
Как это сделать? Можете написать, пожалуйста, весь сценарий?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.02.2020, 13:39
Ответы с готовыми решениями:

Поиск копий файлов и удаление найденных копий
Столкнулся с подобным заданием и никак, не могу понять как его решить: Разработать пакетный файл, находящий копии файлов в 2х заданных...

Поиск новейших версий файлов из одноимённых файлов, находящихся в двух каталогах, и перенос найденных в третий
Здравствуйте. Возникла необходимость в создании кода на batch, который делает следующее. Сначала код проверяет главную папку, содержащую...

Обновление файлов в каталогах
Спасите человека. Нужна маленькая прога и код (на любом языке) которая смогла бы делать обновления файлов в разных, определенных каталогах,...

12
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
22.02.2020, 20:31
https://docs.microsoft.com/en-... wershell-7
0
0 / 0 / 0
Регистрация: 08.11.2017
Сообщений: 42
22.02.2020, 21:21  [ТС]
Та я знаю, что есть этот объект, но как написать полностью сценарий под это задание - не знаю.
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
22.02.2020, 21:46
Read-host
Я смогу во вторник
0
0 / 0 / 0
Регистрация: 08.11.2017
Сообщений: 42
23.02.2020, 11:59  [ТС]
Буду ждать вторника.
0
㊙️
 Аватар для Fors1k
1316 / 244 / 57
Регистрация: 10.08.2018
Сообщений: 574
24.02.2020, 20:38
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
#Vars{
    $Path1="C:\Files\1"
    $path2="C:\Files\2"
#}
$first =(Get-Childitem -Path $Path1 | where-object -FilterScript {($_.mode -ne 'd-----')}).name
$second=(Get-Childitem -Path $Path2 | where-object -FilterScript {($_.mode -ne 'd-----')}).name
$cmp=(Compare-Object -ReferenceObject $first -DifferenceObject $second -IncludeEqual -ExcludeDifferent).InputObject;
foreach($item in $cmp){
    Write-Host 1: $Path1\ -ForegroundColor Green
    Write-Host 2: $Path2\ -ForegroundColor yellow
    $choice = Read-Host В какой папке удалить $item ?
    Remove-Item -Path ((Invoke-Expression('$path'+$choice))+"\"+$item)
}
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
25.02.2020, 08:10
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
param(
    $directory1 = "C:\tmp\001\001",
    $directory2 = "C:\tmp\001\002"
)
 
$directory1Files = Get-ChildItem $directory1 -File
$directory2Files = Get-ChildItem $directory2 -File
 
$fileList = (Compare-Object $directory1Files $directory2Files -IncludeEqual -ExcludeDifferent).InputObject.Name
if ($fileList.count -eq 0){ "Католог $directory1 (1) и Каталог $directory2 (2)"; "не содержат общих файлов"; break}
 
"Католог $directory1 (1) и Каталог $directory2 (2)" 
"Содержат следующие общие файлы:"
"`t$($fileList -join "`r`n`t")"
Switch (Read-Host -Prompt "В каком каталоге их следует удалить (1/2)"){
    "1" {
            $fileList | ForEach-Object {
                Remove-Item (Join-Path $directory1 $_)
            }
        }
    "2" {
                $fileList | ForEach-Object {
                Remove-Item (Join-Path $directory2 $_)
            }
 
        }
    default {"$_ недопустимый ответ"}
}
Добавлено через 23 минуты
Averson, рекомендую к прочтению About Quoting Rules и About Functions Advanced Parameters
0
210 / 59 / 26
Регистрация: 16.06.2016
Сообщений: 193
25.02.2020, 08:59
alhaos, хоть задача тс не очень четко поставлена... Но, мне кажется, более универсальный подход - это использовать хеши файлов. Файлы могут быть переименованы, а содержимое одинаковое. И наоборот, имена одинаковые - содержимое разное.

Что-то типа такого (это наброски, слету):

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
$dir1 = "D:\_1"
$dir2 = "D:\_2"
 
$mass1 = @()
$mass2 = @()
 
$mass1 += ( (Get-ChildItem $dir1 -File).FullName | %{ @{FileName = $_; Hh = (Get-FileHash $_).Hash } })
$mass2 += ( (Get-ChildItem $dir2 -File).FullName | %{ @{FileName = $_; Hh = (Get-FileHash $_).Hash } })
 
foreach($One in $mass1)
{
  foreach($Two in $mass2) { if($One.Hh -eq $Two.Hh) { "Одинаковые файлы >>> $($One.FileName) === $($Two.FileName)" } }
}
1
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
25.02.2020, 09:36
AAT666, Согласен с вами. хеши хороший вариант.

Добавлено через 16 минут
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
param(
    $directory1 = "C:\tmp\001\001",
    $directory2 = "C:\tmp\001\002"
)
 
cls
 
$mass1 = @()
$mass2 = @()
 
Get-ChildItem $directory1 -File | %{$mass1 += @{FileName = $_.Name; Hh = (Get-FileHash $_.FullName).Hash}}
Get-ChildItem $directory2 -File | %{$mass2 += @{FileName = $_.Name; Hh = (Get-FileHash $_.FullName).Hash}}
 
$fileList = @()
 
$fileList = (Compare-Object $mass1 $mass2 -IncludeEqual -ExcludeDifferent).InputObject.FileName
if ($fileList.count -eq 0){ "Католог $directory1 (1) и Каталог $directory2 (2)"; "не содержат общих файлов"; break}
 
"Католог $directory1 (1) и Каталог $directory2 (2)" 
"Содержат следующие общие файлы:"
"`t$($fileList -join "`r`n`t")".TrimEnd("`t")
Switch (Read-Host -Prompt "В каком каталоге их следует удалить (1/2)"){
    "1" {
            $fileList | ForEach-Object {
                Remove-Item (Join-Path $directory1 $_)
            }
        }
    "2" {
                $fileList | ForEach-Object {
                Remove-Item (Join-Path $directory2 $_)
            }
 
        }
    default {"$_ недопустимый ответ"}
}
0
 Аватар для volodin661
6799 / 2298 / 349
Регистрация: 10.12.2013
Сообщений: 7,924
25.02.2020, 11:03
PowerShell
1
2
3
function Kill-Twins($gr){ "`nThere are $($gr.Count) same files. Want to kill? Choice is yours!!`n"; ri $gr.Group -Confirm }
 
gi D1,D2 | group {(Get-FileHash $_). Hash} |? count -gt 1 |% { Kill-Twins $_ }
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
25.02.2020, 11:30
Цитата Сообщение от mr_orange13 Посмотреть сообщение
Для каждой такой пары вывести на экран запрос о том, какую копию удалить
интиресно...

но я бы в зачот не принял

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Windows PowerShell
(C) Корпорация Майкрософт (Microsoft Corporation), 2016. Все права защищены.
 
PS C:\Users\> function Kill-Twins($gr){"`nThere are $($gr.Count) same files. Want to kill? Choice is yours!!`n"
; ri $gr.Group -Confirm }
PS C:\Users\> gi 'c:\tmp\001\001', 'c:\tmp\001\002'| group {(Get-FileHash $_). Hash} |? count -gt 1 |% { Kill-T
wins $_ }
 
There are 2 same files. Want to kill? Choice is yours!!
 
 
Подтверждение
Элемент в C:\tmp\001\001 имеет дочерние объекты, и параметр Recurse не указан. При продолжении все дочерние объекты
будут удалены вместе с элементом. Вы действительно хотите продолжить?
[Y] Да - Y  [A] Да для всех - A  [N] Нет - N  [L] Нет для всех - L  [S] Приостановить - S  [?] Справка
(значением по умолчанию является "Y"):
0
 Аватар для volodin661
6799 / 2298 / 349
Регистрация: 10.12.2013
Сообщений: 7,924
25.02.2020, 12:27
Цитата Сообщение от alhaos Посмотреть сообщение
но я бы в зачот не принял
это почему же ?
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
25.02.2020, 12:55
Цитата Сообщение от volodin661 Посмотреть сообщение
это почему же ?
виноват, перечитал задание
Цитата Сообщение от mr_orange13 Посмотреть сообщение
Для каждой такой пары
все верно )))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.02.2020, 12:55
Помогаю со студенческими работами здесь

Группировка файлов в каталогах
Всем привет! Есть структура папок: archive | +2014-Apr-01 | +2014-Apr-02 |

Поиск файлов в каталогах и подкаталогах
Люди у меня есть своя база полноценных текстовых документов с каким-то названием. Нужено организовать поиск этих документов, но при этом...

Поиск файлов в каталогах и подкаталогах
Как это можно реализовать? :)

Обработка pdf файлов в каталогах с подкаталогами
К примеру в каталоге c:\dir1 и его подкаталогах находятся pdf файлы. Их необходимо найти и передать утилите pdftotext. Команда в простейшем...

Запрет в заданных каталогах на создание файлов
Нужно запретить в заданных каталогах создавать новые файлы, копировать или перемещать в них уже созданные файлы из других каталогов....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru