С Новым годом! Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/64: Рейтинг темы: голосов - 64, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 12.06.2016
Сообщений: 288

Список по маске

21.01.2019, 14:48. Показов 13034. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как вывести список содержимого в директории, исключив из папки фалы '*.log','*.log*' и всё содержащее внутри папки temp, включая её саму?
PowerShell
1
ls "C:\1\3" -Recurse | ?{($_.psiscontainer -ne "C:\1\3\temp") -and ($_.Name -notlike "*.log*")}
так не получается.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.01.2019, 14:48
Ответы с готовыми решениями:

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

Список файлов по заданной маске
Добрый день, подскажите, везде искал ничего подобного не смог найти. Хочу реализовать следующий макрос: 1. Есть файл на Листе1 задаю ...

Вывести список файлов по маске
Здравствуйте!Как вывести список файлов по маске используя регулярные выражения ,так почему то не проходит start cmd /K java DirList...

51
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
22.01.2019, 17:16
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от YuS_2 Посмотреть сообщение
если... а если не передавать? Нельзя?
Можно, но тогда вы в качестве значения ключа используете не то, что написано в справке. И тут, как я уже писал, хорошо бы проверить/выяснить, чем это закончится:

прочитать: dir 'c:\1\1.txt', как: выдать все элементы '1.txt' из расположения 'c:\1\'. А при добавление ключа -Recurse, понять запрос: dir 'c:\1\1.txt' -rec, как: выдать все элементы '1.txt' из расположения 'c:\1\' и всех его дочерних элементах расположений (проще говоря подпапок).
Это примерно, как понимать и быть готовым к тому, что

Code
1
2
3
4
5
6
7
8
9
10
11
PS C:\Temp> 1 + 2
3
 
PS C:\Temp> '1' + '2'
12
 
PS C:\Temp> '1' + 2
12
 
PS C:\Temp> 1 + '2'
3
Цитата Сообщение от YuS_2 Посмотреть сообщение
нужно массив с путями к файлам и каталогам, обработать dir, причем рекурсивно
А откуда взялось такое задание? И в чём заключается обработка?

И если в массиве есть 'c:\1\2' и 'c:\1\2\3', то мы будем сначала рекурсивно обрабатывать каталог '2', а затем каталог '3'? Но ведь при рекурсивной обработке каталога '2', мы уже получили все элементы и из каталога '3'...

И если даже именно это вам и нужно, пожалуйста:

PowerShell
1
('C:\1\3\1.txt','C:\1\3\A','C:\1\3\B\1.txt' |% {dir -LiteralPath $_ -rec}).FullName
0
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,210
22.01.2019, 18:23
Цитата Сообщение от KDE777 Посмотреть сообщение
в качестве значения ключа используете не то, что написано в справке.
в какой справке написано, что ключ -recurse нельзя использовать с неконтейнером?

Цитата Сообщение от KDE777 Посмотреть сообщение
как понимать и быть готовым
понимать, быть готовым и логика - не одно и то же.
В справке нет описания нового принципа работы ключа -recurse, зато зачем-то присутствует описание старого, причем логичного принципа работы.

Цитата Сообщение от KDE777 Посмотреть сообщение
А откуда взялось такое задание?
Оттуда.

Цитата Сообщение от KDE777 Посмотреть сообщение
И в чём заключается обработка?
в рекурсивном просмотре путей из массива.

Цитата Сообщение от KDE777 Посмотреть сообщение
И если в массиве есть 'c:\1\2' и 'c:\1\2\3', то мы будем сначала рекурсивно обрабатывать каталог '2', а затем каталог '3'?
Если потребуется - да.

Цитата Сообщение от KDE777 Посмотреть сообщение
если даже именно это вам и нужно, пожалуйста
Цитата Сообщение от YuS_2 Посмотреть сообщение
нужно массив с путями к файлам и каталогам, обработать dir, причем рекурсивно и получить к тому же вменяемый результат, а не извращаться с дополнительными проверками - вот, что нужно...
Но, конечно, же, как вариант это подойдет под задачу... правда никто и не говорил о том, что других способов решения не существует, речь была о другом.
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
22.01.2019, 18:43
Цитата Сообщение от YuS_2 Посмотреть сообщение
Но, конечно, же, как вариант это подойдет под задачу
А в чём заключаются "извращения с дополнительными проверками" в этом варианте?

PowerShell
1
$arr |% {dir -LiteralPath $_ -rec}
Добавлено через 13 минут
Цитата Сообщение от YuS_2 Посмотреть сообщение
В справке нет описания нового принципа работы ключа -recurse, зато зачем-то присутствует описание старого, причем логичного принципа работы.
Всё там есть, уже цитировал:

1. Получает элементы в указанных расположениях и всех дочерних элементах расположений.
2. В PS 3 (и старше), параметр Recurse сработает и в том случае, если элемент не имеет дочерних элементов, например C:\Windows\*.exe

Из этой справки, можно сделать вывод, что начиная с PS 3, если к dir попал элемент не имеющий дочерних элементов (т.е. файл), параметр -rec всё равно сработает и см. п.1 получит "элементы в указанных расположениях и всех дочерних элементах расположений".
0
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,210
22.01.2019, 18:54
Цитата Сообщение от KDE777 Посмотреть сообщение
А в чём заключаются
В том, что это нигде не описано в помощи ... по сути можно ведь и так:
PowerShell
1
dir -lit $arr -rec
хотя ранее работало и без -lit.
А с учетом того, что никаких исключений при выполнении кода не будет, то при использовании старых наработок, могут возникать неожиданные коллизии. Примерно так...

ЗЫ Ладно, всё уже выяснили... исправлять или менять новое поведение никто не будет уже, поэтому примем как данность и будем иметь в виду. А то, что-то шибко мы тут расфлудились, почти на ровном месте...

Добавлено через 2 минуты
Цитата Сообщение от KDE777 Посмотреть сообщение
Всё там есть
Нет.
Цитата Сообщение от KDE777 Посмотреть сообщение
Получает элементы в указанных расположениях и всех дочерних элементах расположений.
1. Там нет определения местоположения.
2. Подмена пути к файлу, путем к его родительскому каталогу - не есть само собой разумеющееся действие, оно не укладывается в обычную логику программирования.

Добавлено через 1 минуту
Цитата Сообщение от KDE777 Посмотреть сообщение
В PS 3 (и старше), параметр Recurse сработает и в том случае, если элемент не имеет дочерних элементов, например C:\Windows\*.exe
Там нет этого. Там присутствует описание старого принципа работы. Описание нового принципа в справке отсутствует.

Добавлено через 1 минуту
Цитата Сообщение от KDE777 Посмотреть сообщение
можно сделать вывод
Это называется додумать самостоятельно, не имея на то никаких оснований. А вывод можно сделать только эмпирическим путем.
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
22.01.2019, 19:43
Цитата Сообщение от YuS_2 Посмотреть сообщение
Там нет этого. Там присутствует описание старого принципа работы. Описание нового принципа в справке отсутствует.
Забыли упомянуть, что там ещё присутствует детальное описание принципа, который не сработает в старых версиях. По вашему разработчики подробно описали в справке принцип действия, который не срабатывал раньше и не работает теперь? В MS конечно заслужили массу справедливой критики, но чтобы делать такое....

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

Не по теме:

Цитата Сообщение от YuS_2 Посмотреть сообщение
А вывод можно сделать только эмпирическим путем.
Ничего плохого в проверке теории практикой я не вижу :)

0
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,210
22.01.2019, 20:20
Цитата Сообщение от KDE777 Посмотреть сообщение
Забыли упомянуть, что там ещё присутствует детальное описание принципа, который не сработает в старых версиях.
Сомневаюсь в детальности. И там много чего присутствует такого, что не сработает в старых версиях. Поконкретнее, пожалуйста.
Хотя, обратной совместимости никто не обещал и даже более того, это нормально, ибо развитие не стоит на месте. В общем-то, именно это не имеет большого значения, кроме исторически справочного.
А под детальным описанием, как минимум, можно было бы понимать:
1. Если -path является контейнером, поведение такое-то. C доп. ключом -recurse, поведение такое-то.
2. Если -path является не контейнером, поведение такое-то. C доп. ключом -recurse, поведение такое-то.
- примерно так... можно и более кратко, но главное - донести смысл принципа работы.

Цитата Сообщение от KDE777 Посмотреть сообщение
По вашему разработчики подробно описали в справке принцип действия, который не срабатывал раньше и не работает теперь?
Абстракции обсуждать не хочется. Никакого подробного описания в справке, я не увидел.

Цитата Сообщение от KDE777 Посмотреть сообщение
Ничего плохого в проверке теории практикой я не вижу
Так и я не вижу. Проблема в том, что теория нигде толком не описана.
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
22.01.2019, 21:52
Just for fun - вариант только с одним dir, без foreach и дополнительных if, else, dir и gi

PowerShell
1
dir ($root=[regex]::Escape('C:\1\3')) -rec |? FullName -NotMatch "$root\\Temp(\\|$)" |? {(!$_.PSIsContainer -and $_.Extension -NotLike '.log*') -or ($_.PSIsContainer -and !$_.GetFileSystemInfos())} | sort FullName | ft FullName,PSIsContainer,Length

Не по теме:

Кликните здесь для просмотра всего текста
Цитата Сообщение от YuS_2 Посмотреть сообщение
Сомневаюсь в детальности. И там много чего присутствует такого, что не сработает в старых версиях. Поконкретнее, пожалуйста.
https://www.cyberforum.ru/post13261640.html

0
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,210
23.01.2019, 09:37
Цитата Сообщение от KDE777 Посмотреть сообщение
https://www.cyberforum.ru/post13261640.html
Расположение может быть расположением файловой системы, таким как каталог, или расположением, предоставленным другим поставщиком Windows PowerShell, например кустом реестра или хранилищем сертификата.
Тут есть описание, что будет являться расположением, если указан не контейнер, а:
1.
PowerShell
1
dir 'c:\1\filename.ext'
?

А есть ли там указание, что будет являться расположением, в таком варианте:
2.
PowerShell
1
dir 'c:\1\filename.ext' -rec
?
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
23.01.2019, 13:19
Цитата Сообщение от YuS_2 Посмотреть сообщение
А есть ли там указание, что будет являться расположением, в таком варианте:
PowerShell
1
dir 'c:\1\filename.ext' -rec
Столько раз написали про логику или отсутствие таковой, а в чём заключается ваша логика, когда вы пишите такой код? Передаёте в path полный путь к файлу и добавляете ключ -rec, хотя справка пишет только про расположения, имена (относительно текущей папки) и подстановки. Вы чего ожидаете в этом случае?

Тем более, далее вы соглашаетесь с моим замечанием "У каталога дочерние Item'сы - файлы и подкаталоги, а какие дочерние Item'сы у файла?"

Цитата Сообщение от YuS_2 Посмотреть сообщение
Не могу не согласится, но, тем не менее, это не дает право командлету, вместо дочерних итемов, заглядывать в сестринские (или братские ) каталоги, об этом его точно не просили...
Хотя уже в этом ответе, вы почему-то считаете, что ключ -rec не приглашение к рекурсивным действиям...

А теперь ещё раз - в справке есть примеры и объяснения для [dir c:\windows\*.exe -rec], [dir "*.txt" -rec], чётко написано, что path - это "Specifies a path to one or more locations. Wildcards are permitted." Так же, там есть описание того, как -rec не работал раньше (т.е. работает теперь). Прочитав всё это, мне становится очевидным, что:

Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
dir C:\1\1.txt      аналогично dir C:\1 | ? Name -Like '1.txt'
dir 1.txt           аналогично dir .\ | ? Name -Like '1.txt'
dir *.txt           аналогично dir .\ | ? Name -Like '*.txt'
dir C:\1\1.txt -rec аналогично dir C:\1 -rec | ? Name -Like '1.txt'
dir C:\1\*.txt -rec аналогично dir C:\1 -rec | ? Name -Like '*.txt'
dir 1.txt -rec      аналогично dir .\ -rec | ? Name -Like '1.txt'
dir *.txt -rec      аналогично dir .\ -rec | ? Name -Like '*.txt'


Мне хватило, ранее, бегло прочитанной справки (а не подробного чтения сейчас, когда возникло это обсуждение) и знания того, что в PS есть отдельные Get-ChildItem и Get-Item, чтобы сразу обратить внимание на этот код: dir C:\1\3 |% {dir $_.fullname -rec} А значит разработчики и писатели справки, по крайне мере для меня, постарались, чтобы код dir 1.txt -rec не стал "магической способностью" и "трындецом"
0
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,210
23.01.2019, 14:03
Цитата Сообщение от KDE777 Посмотреть сообщение
в чём заключается ваша логика, когда вы пишите такой код? Передаёте в path полный путь к файлу и добавляете ключ -rec
Перечитайте топик, там есть неоднократно озвученный ответ на этот вопрос... Зачем повторяться?

Цитата Сообщение от KDE777 Посмотреть сообщение
Хотя уже в этом ответе, вы почему-то считаете, что ключ -rec не приглашение к рекурсивным действиям...
Не стоит всё переворачивать с ног на голову и фантазии выдавать за действительность ... в том ответе, всего лишь согласие с тем, что у файлов нет дочерних элементов, а вместо логичного исключения, начинать просматривать рекурсивно каталоги, расположенные на одном уровне с указанным Item - нелогично. Также нелогично подменять Item его родительским каталогом.

Цитата Сообщение от KDE777 Посмотреть сообщение
чётко написано, что path - это "Specifies a path to one or more locations.
если там четко написано, то тогда при попытке подсунуть вместо "Specifies a path to one or more locations", сам Item с абсолютным путем, столь же четко должно отработать исключение с отсылом к справке, а не осуществляться подмена Item-а, на его DirectoryName...

И хорош уже троллить... давно всё выяснили:
1. Справка куцая, без подробностей.
2. Поведение командлета никто уже не изменит, хоть зафлудись.
3. Принцип работы надо принять и учитывать.

Что ещё хочется обсудить? мне - ничего
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
23.01.2019, 14:31
Цитата Сообщение от YuS_2 Посмотреть сообщение
если там четко написано, то тогда при попытке подсунуть вместо "Specifies a path to one or more locations", сам Item с абсолютным путем, столь же четко должно отработать исключение с отсылом к справке
Вы раз, за разом читаете справку (да и мои ответы) лишь частично, а полностью там написано "Specifies a path to one or more locations. Wildcards are permitted. The default location is the current directory (.)."

И получается, что примеры из этой же справки с -path "*.txt" и "c:\windows\*.exe" вас не заставили задуматься, что при:

PowerShell
1
dir "c:\windows\*.exe" -rec
Как минимум происходит следующее:

PowerShell
1
dir "c:\windows\" -rec | ? Name -Like "*.exe"
А дальше понять или просто проверить, что вместо -Like "*.exe", может точно также сработать -Like "1.exe"

Цитата Сообщение от YuS_2 Посмотреть сообщение
Принцип работы надо принять и учитывать
Очень верное замечание, особенно если к принять и учитывать, добавить ещё и понять
0
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,210
23.01.2019, 14:40
Цитата Сообщение от KDE777 Посмотреть сообщение
Вы раз, за разом
Это Вы раз за разом вытягиваете маски из воздуха. Их там нет. Или вы их где-то обнаружили?
Это разве непонятно? Вот, когда они будут использоваться, тогда и будет о чем говорить.
гипотетические примеры пока не интересны.

Цитата Сообщение от KDE777 Посмотреть сообщение
Очень верное замечание, особенно если к принять и учитывать, добавить ещё и понять
Я ведь тоже могу балбесом вас назвать. Только какой в этом смысл? Ни жарко, ни холодно от этого мне не станет. А вам видимо подобное действие доставляет несравнимое удовольствие? Ну, что же, флаг вам в руки и ... далее без меня.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.01.2019, 14:40
Помогаю со студенческими работами здесь

Список всех файлов и папок указанной директории по заданной маске
Здравствуйте! Требуется написать программу, используя FileNameFilter которая выведет на экран список всех файлов и папок указанной...

Как получить список таблиц по маске из нескольких баз данных?
Просьба помочь решить проблему, сам не осилю: Есть база mybase.mdb (access 2003). В корневой директории есть папка /import , а в ней...

Замена фразы по маске на другую фразу по маске в файле
Добрый день! Имеется задача, которую, к сожалению, пока не могу реализовать: Есть текстовый файл состоящий из множества строк. В нем...

Копирование файлов в папки по маске файла и маске папки
Добрый день! Товарищи, помогите. Возникла надобность раскладывать файлы по маске папки и маске файла. То есть, расскажу детальней, есть...

Имеется список женихов и список невест. Объединить эти списки в список пар с учетом требований партнерам
Имеется список женихов и список невест. Каждая запись списка содержит пол, имя, возраст, рост, вес, а также требования к партнеру:...


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

Или воспользуйтесь поиском по форуму:
52
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru