|
2 / 2 / 1
Регистрация: 20.11.2021
Сообщений: 7
|
|||||||||||||||||||||||||||||||||||||||||
Ошибка (?) в алгоритме обработки маски файлов командами DEL, DIR и командлетами PowerShell29.06.2022, 13:06. Показов 1176. Ответов 4
Столкнулся с тем, что банальные команды "dir *.tmp" и "del *.tmp" отрабатывают не так, как ожидалось.
Вместо обработки маски [*.tmp] фактически обрабатывается маска [*.tmp*.]. Проверял на x64: Win 7 Pro, Win 10 Pro, Win Server 2019, Win Server 2022 На Win 7 так происходит на диске C: и D: На Win 10 и Win Server 2019/2022 - так происходит только на диске С:, а на диске D:\ маска отрабатывает как и ожидается, то есть только как [*.tmp]. Разумных объяснений этому у меня нет... Вот простой тест для демонстрации эффекта:
У меня написано много батников, где выполняется DEL... Чтобы не переписывать все сразу, решил сделать в батнике функцию xDel с правильной обработкой маски - и вызывать ее вместо штатной команды DEL /A /Q /F. Первой идеей была такая вставка на PowerShell:
Попробовал так:
Заработал такой вариант:
Заодно сделал функцию xDelS, как эквивалент для DEL /A /Q /F /S. Сейчас это работает так:
Ура?... Но все это больше похоже не на кодинг, а на какой-то костылинг... Кроме того, очевидно, затронуты и другие команды, использующие выбор файлов по маске. К примеру type *.tmp отрабатывает маску как [*.tmp*.] Переписывать их все - смысла никакого. Хотя, конечно, не все они нужны и/или критичны. Постепенно переписал бы все на PowerShell, но костыли с экранированием тоже как-то напрягли. Не очень понимаю почему, но ничего о подобной "расширенной" трактовке маски не нагуглилось. А ведь судя по тому, что и на Win 7 так работает, это достаточно давняя история. Конечно, можно пересмотреть каждый батник (хотя у меня их сильно за сотню), выявить, где обработка маски может обернуться проблемой и решать в каждом случаи, что делать. Но, если уж все перелопачивать, хотелось бы с большим смыслом. Собственно вопросы: 1) Есть какие-то идеи, почему маски так странно обрабатываются? Это "бага или фича"? Может, это где-то описано? 2) Есть ли варианты как-то это обойти малой кровью, не переписывая все батники на чем-то другом? 3) Есть ли возможность какой-то магией заставить PowerShell отрабатывать маску всегда однозначно? 4) Если вариантов, кроме как переписать батники, нет - то какой скриптовый язык стоит посмотреть? Добавлено через 1 час 37 минут Оказалось, что forfiles нормально обрабатывает маску вида [*.tmp], не расширяет. Вариант замены DEL без PowerShell, вывод на экран отсутствует.
0
|
|||||||||||||||||||||||||||||||||||||||||
| 29.06.2022, 13:06 | |
|
Ответы с готовыми решениями:
4
Средство обработки копий файлов PowerShell
|
|
|
||||||||||||
| 29.06.2022, 13:32 | ||||||||||||
1
|
||||||||||||
|
2 / 2 / 1
Регистрация: 20.11.2021
Сообщений: 7
|
||
| 29.06.2022, 14:03 [ТС] | ||
|
Спасибо! Работает. Только добавил ключ, чтобы папки убрать из выдачи dir:
dir /A:-D и далее по тексту
0
|
||
|
2 / 2 / 1
Регистрация: 20.11.2021
Сообщений: 7
|
|
| 30.06.2022, 13:20 [ТС] | |
|
xcopy, copy, robocopy - аналогично трактуют маску "расширенно", то есть как [*.tmp*.]
Также обнаружился глюк с файлами вида "*.", где точка присутствует в явном виде, а после нее ничего нет. copy пропускает при копировании файлы "*.", сообщая "Не удается найти указанный файл" xcopy прерывает копирование и завершается при попытке копирования файла "*.", сообщая "Не удается найти указанный файл" robocopy - копирует Добавлено через 1 час 15 минут del * удаляет встречающиеся файлы вида [*.], но если удалять по одному - не удаляет (Не удается найти файл) Например, файл "11." не будет удален командой del 11.
0
|
|
|
2 / 2 / 1
Регистрация: 20.11.2021
Сообщений: 7
|
|
| 03.07.2022, 20:39 [ТС] | |
Сообщение было отмечено FlasherX как решение
Решение
RTFM...
Такое поведение DIR описано в документации. Поиск идет в том числе по коротким именам (8.3), поэтому под маску [*.tmp] реально попадают [*.tmp*.], ведь в именах 8.3 сохраняются только 3 символа в расширении. Очевидно, остальные команды, трактующие маску расширенно, тоже учитывают имена формата 8.3 Посмотреть короткие имена можно dir /x https://docs.microsoft.com/ru-... mmands/dir В принципе, на томах NTFS есть возможность отключить ведение имен вида 8.3 и удалить все такие имена. В этом случаи DIR работает только с длинными именами и маски вида *.tmp выбирают файлы в строгом соответствии с маской.
0
|
|
| 03.07.2022, 20:39 | |
|
Помогаю со студенческими работами здесь
5
Командами строковой обработки Задать корректный паттерн для обработки маски из селекторов Маски имён файлов Задание маски файлов Задание точной маски файлов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|