0 / 0 / 0
Регистрация: 12.06.2016
Сообщений: 288

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

21.01.2019, 14:48. Показов 13496. Ответов 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
1887 / 1109 / 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
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
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
1887 / 1109 / 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
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
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
1887 / 1109 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
22.01.2019, 19:43
Цитата Сообщение от YuS_2 Посмотреть сообщение
Там нет этого. Там присутствует описание старого принципа работы. Описание нового принципа в справке отсутствует.
Забыли упомянуть, что там ещё присутствует детальное описание принципа, который не сработает в старых версиях. По вашему разработчики подробно описали в справке принцип действия, который не срабатывал раньше и не работает теперь? В MS конечно заслужили массу справедливой критики, но чтобы делать такое....

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

Не по теме:

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

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

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

Цитата Сообщение от KDE777 Посмотреть сообщение
Ничего плохого в проверке теории практикой я не вижу
Так и я не вижу. Проблема в том, что теория нигде толком не описана.
0
 Аватар для KDE777
1887 / 1109 / 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
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
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
1887 / 1109 / 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
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
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
1887 / 1109 / 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
7407 / 2260 / 361
Регистрация: 10.03.2016
Сообщений: 5,216
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru