Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
10582 / 5545 / 864
Регистрация: 07.04.2013
Сообщений: 15,660
1

Сжатие файлов, НЕ соответствующих условиям

09.02.2016, 18:15. Показов 1954. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую !
Ничерта не понимаю в powershell, хочу учиться
В качестве обьекта мучения обучения - домашний комп., win 7 и дефолтный posh

Попытка первая:
Как выполнить ntfs сжатие для файлов НЕ соответствующих уловиям ?

К примеру сжать рекурсивно каждый файл в папке D:\Temp, но НЕ сжимать файлы, в имени которых или в пути к которым встречается TEST

Пока накопипастил из интернетов это:
PowerShell
1
Get-ChildItem -Path D:\Temp -recurse | ? name -CNotLike *TEST* | Enable-NtfsCompression
Что ему надо ?
Сжатие файлов, НЕ соответствующих условиям



В продорлжение темы
Допустим с ? name -CNotLike понятно, а как проверить то же самое, но для пути ? Или можно как то все разом ?
Как проверить на несоответствие одновременно разным условиям ?

К примеру одновременно не содержит в названии TEST и не является изображением ?
Если можно простые общие примеры.

Заранее благодарю.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.02.2016, 18:15
Ответы с готовыми решениями:

Поиск в таблице и вывод значений, соответствующих условиям
Друзья доброго всем утра. Сегодня прислали задание с утра, но мой мозг категорически...

Из заданного диапазона чисел выделить множества чисел, соответствующих заданным условиям
Нужна помощь осталась последняя задача и я не знаю как решить (Болел) Помогите ПЛЗ Из диапазона...

Сжатие файлов
Здравствуйте) Скажите пожалуйста, как можно сжать zip (rar) архивы и папки? То есть памяти на...

Сжатие файлов
Обьясните нубу почему при сжатии gzip размер файла у меня наоборот увеличивается??? Например при...

21
10582 / 5545 / 864
Регистрация: 07.04.2013
Сообщений: 15,660
09.02.2016, 18:52  [ТС] 2
Цитата Сообщение от vavun Посмотреть сообщение
проверить то же самое, но для пути ? Или можно как то все разом ?
Я так понял это FullName вместо Name надо

Добавлено через 10 минут
В принципе вот оно
PowerShell
1
Get-ChildItem -Path D:\Temp -recurse | where-object { $_.FullName -CNotlike "*TEST*" }
Непонятно что с Enable-NtfsCompression ?
Версия низкая ?

Вот так работает несколько условий
PowerShell
1
Get-ChildItem -Path D:\Temp -recurse | where-object { $_.FullName -CNotlike "*TEST*" } | where-object { $_.FullName -CNotlike "*123*" }
Это можно как то укоротить ?
0
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
09.02.2016, 18:57 3
PowerShell
1
gci d:\temp -r -ex *test*
1
10582 / 5545 / 864
Регистрация: 07.04.2013
Сообщений: 15,660
09.02.2016, 18:59  [ТС] 4
Хочу справку почитать по CNotlike. Мне куда стучаться ?
В help where-object глубоко влез - не нашел.

Добавлено через 1 минуту
greg zakharov, даже так можно, прикольно, спасибо )

А что за -ex ?
0
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
09.02.2016, 19:01 5
-ex - сокращение от Exclude.
На счет -cnotlike:
PowerShell
1
man about_comparison_operators
1
10582 / 5545 / 864
Регистрация: 07.04.2013
Сообщений: 15,660
09.02.2016, 19:08  [ТС] 6
Это тоже сокращение ?
Что то не найду никак ...

Добавлено через 12 секунд
Ага, вижу

Добавлено через 3 минуты
greg zakharov, а exclude множественная ? Или придется так же по конвейеру типа
-ex *1* | -ex *2*

?

Добавлено через 3 минуты
Нашел

-Exclude *123*, *456*, *789*
0
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
09.02.2016, 19:09 7
Если Вы наберете в хосте
PowerShell
1
man gci -det
то увидите, что -Exclude представляет собой массив строковых значений, иными словами, чтобы задать несколько исключений:
PowerShell
1
gci -ex *test*, *foobar*
1
1885 / 1107 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
09.02.2016, 19:16 8
Цитата Сообщение от vavun Посмотреть сообщение
Непонятно что с Enable-NtfsCompression
В стандартном наборе командлетов PS такого нет:

Get-Command *ntfs* -CommandType Cmdlet

Для использования Enable-NtfsCompression нужно скачать, установить и импортировать сторонний модуль (набор командлетов) - Carbon PowerShell module
1
10582 / 5545 / 864
Регистрация: 07.04.2013
Сообщений: 15,660
09.02.2016, 19:22  [ТС] 9
KDE777, понял, благодарю )
0
1885 / 1107 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
09.02.2016, 19:26 10
Различных доп. модулей очень много...

Есть от самой MS для управления её продуктами (Exchange, SQL, SharePoint...) или серверными ролями (AD, DNS, DHCP, RDS...)

А есть от сторонних компаний, как этот "Carbon" или например ActiveRolesManagementShell от бывшей QuestSoftware
1
10582 / 5545 / 864
Регистрация: 07.04.2013
Сообщений: 15,660
09.02.2016, 19:29  [ТС] 11
Мне бы разобраться с тем, что есть ) До модулей я пока не дорос )
0
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
09.02.2016, 19:36 12
KDE777, модули можно создавать самому, тянуть с nuget или github, - Вы бы просто пока навели человека на
PowerShell
1
man about_modules
уверен, он бы сам во всем постепенно разобрался.
0
1885 / 1107 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
09.02.2016, 20:20 13
Цитата Сообщение от vavun Посмотреть сообщение
Как выполнить ntfs сжатие для файлов НЕ соответствующих условиям
Т.к. через стандартное Set-ItemProperty можно поменять только - Archive, Hidden, Normal, ReadOnly или System - используя побитовые операции, вот видимо в этом Карбон и сделали что-то для изменения Compressed атрибута...

Добавлено через 32 минуты
Цитата Сообщение от vavun Посмотреть сообщение
К примеру сжать рекурсивно каждый файл в папке D:\Temp, но НЕ сжимать файлы, в имени которых или в пути к которым встречается TEST
Вот так можно скомбинировать "\Windows\System32\compact.exe" и PowerShell и установить всем файлам, которые не содержат в пути или имени *Test* - Compressed атрибут:

PowerShell
1
ls c:\Temp -re -File | ? FullName -notlike '*test*' | %{compact /c $_.FullName}
или подробно:

PowerShell
1
2
3
4
foreach ($file in (Get-ChildItem -Path c:\Temp\_Files -Recurse -File | Where-Object {$_.FullName -notlike '*test*'}))
{
compact /c $file.FullName
}
Добавлено через 9 минут
Цитата Сообщение от greg zakharov Посмотреть сообщение
gci d:\temp -r -ex *test*
эта команда не исключит файлы:

Цитата Сообщение от vavun Посмотреть сообщение
в пути к которым встречается TEST
1
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
09.02.2016, 20:52 14
Цитата Сообщение от KDE777
эта команда не исключит файлы
Да, ладно!
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
PS E:\sandbox> ls -r D:\source
    Каталог: D:\source
 
 
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        09.02.2016     22:46            1_SOURCE
-a---        08.02.2016     23:24       1171 source.c
-a---        08.02.2016     23:18       1612 source.obj
-a---        30.01.2016     18:49        951 source.py
 
 
    Каталог: D:\source\1_SOURCE
 
 
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        08.02.2016     23:24       1171 source.c
-a---        08.02.2016     23:18       1612 source.obj
-a---        30.01.2016     18:49        951 source.py
 
PS E:\sandbox> ls D:\source -r -ex *source*
PS E:\sandbox>
0
1885 / 1107 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
09.02.2016, 21:06 15
Цитата Сообщение от greg zakharov Посмотреть сообщение
Да, ладно!
Так у вас все имена (name) файлов попадают под exclude, а вы в каталог D:\source положите хотя бы один файл с другим именем - 1.txt

ведь ещё раз - условие было: "НЕ сжимать файлы, в имени которых или в пути к которым встречается TEST"

Добавлено через 6 минут
PowerShell
1
ls c:\Temp\_Files\ -R | select fullname
Кликните здесь для просмотра всего текста

FullName
--------
C:\Temp\_Files\AAA
C:\Temp\_Files\BBB
C:\Temp\_Files\Test
C:\Temp\_Files\AAA\1.txt
C:\Temp\_Files\BBB\test.txt
C:\Temp\_Files\Test\1.txt


PowerShell
1
ls c:\Temp\_Files\ -R -ex *test* | select fullname
Кликните здесь для просмотра всего текста

FullName
--------
C:\Temp\_Files\AAA
C:\Temp\_Files\AAA\1.txt
C:\Temp\_Files\BBB
C:\Temp\_Files\Test\1.txt
0
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
09.02.2016, 21:11 16
KDE777,
Кликните здесь для просмотра всего текста
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PS E:\sandbox> ni D:\source\1.txt -ItemType file
    Каталог: D:\source
 
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        09.02.2016     23:06          0 1.txt
 
PS E:\sandbox> ls D:\source -r -Exclude *source*
    Каталог: D:\source
 
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        09.02.2016     23:06          0 1.txt
 
E:\sandbox>

и далее:
Кликните здесь для просмотра всего текста
PowerShell
1
2
3
4
5
PS E:\sandbox> (ls D:\source -r -Exclude *source*).GetType()
 
IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     FileInfo                                 System.IO.FileSystemInfo
0
1885 / 1107 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
09.02.2016, 21:18 17
greg zakharov, ну вот у вас "D:\source\1.txt" и проскочил, а vavun просил, чтобы в пути к файлу исключение не встречалось...

Добавлено через 2 минуты
то что 1.txt это - System.IO.FileSystemInfo я понимаю, но если мы на нём установим Compressed атрибут, то получается нарушим условие задания...
0
Покинул форум
3672 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
09.02.2016, 21:22 18
KDE777, уважаемый, Вы явно переутомилсь. Суть сводилась тому, как исключить пути, которые не должны передаваться далее по конвейеру другому командлету, а не разглагольствованию в стиле brainf*cking.
0
10582 / 5545 / 864
Регистрация: 07.04.2013
Сообщений: 15,660
09.02.2016, 21:24  [ТС] 19
KDE777, greg zakharov, не ругайтесь, пожалуйста
0
1885 / 1107 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
09.02.2016, 21:39 20
Цитата Сообщение от greg zakharov Посмотреть сообщение
Суть сводилась тому, как исключить пути, которые не должны передаваться далее по конвейеру другому командлету
и почему у вас для "1.txt" не исключился "D:\source"?

Цитата Сообщение от vavun Посмотреть сообщение
не ругайтесь, пожалуйста
даже не думал

Добавлено через 4 минуты
ведь спрашивали предельно ясно:

Цитата Сообщение от vavun Посмотреть сообщение
К примеру сжать рекурсивно каждый файл в папке D:\Temp, но НЕ сжимать файлы, в имени которых или в пути к которым встречается TEST
а вы ответили:

Цитата Сообщение от greg zakharov Посмотреть сообщение
gci d:\temp -r -ex *test*
и тем самым сжали d:\temp\TEST\1.txt
0
09.02.2016, 21:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.02.2016, 21:39
Помогаю со студенческими работами здесь

Сжатие файлов
Здравствуйте, подскажите как можно сжать файлы в Windows 7 ? (avi, mkv) И так, чтобы их можно было...

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

Сжатие набора файлов
Здравствуйте. Есть некая структура папок с файлами, в коде имеется список FileInfo файлов, которые...

Сжатие bmp файлов на с++
Нужно через манипуляции с палитрой привести исходный код к соотношению 8 к 1 пикселей. Как это...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru