![]() |
Удалить все папки, внутри которых есть файл с определённым имменем.
Добрый.
Есть папка...скажем d:\home и в ней подпапки. Все подпапки имеют длинные имена с кирилилцей и пробелами.. Скажем d:\home\кириллица 123 abc Внутри есть еще подпапки... Нужен батник, который будет искать во всех подпапках (и их подпапках и т.д..) d:\home файл с именем - *tts*.*, и если такой будет найден - удаляло материнскую подпапку, но не удаляло d:\home. Пример: 1) файл лежит в d:\home\кириллица 123 abc\подпапка\подпапка\qwtts.wav - здесь нужно удалить папку "кириллица 123 abc" со всеми файлами и подпапками. 2) файл лежит в d:\home\кириллица 123 abc\tts.mp3 - здесь также нужно удалить папку "кириллица 123 abc" со всеми файлами и подпапками. но если в подпапках d:\home нет файла *tts*.* - ничего не трогать/не удалять. Надеюсь понятно описал. Спасибо. |
Цитата:
Пробуйте: Скрытый текст
Код:
@echo off Учтите, что до: Цитата:
|
Тестирую на Win10.
В C:\Users\Admin\Desktop\12333 лежит еще 3 папки с файлом tts.txt на разных уровнях подпапок. добавил паузы для наглядности. Скрытый текст
Код:
pause ничего не происходит.. . первая pause срабатывает, второй нет. После первой паузы "блымнуло" и всё) |
9119, не надо пауз. Откройте окно интерпретатора команд (Win-R, «cmd.exe», Enter), перетащите в него из Проводника пакетный файл, нажмите Enter.
Вот Вам код для отладки: Скрытый текст
Код:
@echo off покажите его вывод. |
Скрытый текст
Код:
C:\Users\Admin>C:\Users\Admin\Desktop\12333\del.cmd файлы вида *tts*. * есть во всех 3 папках, на разных уровнях. |
9119, для начала переименуйте Ваш del.cmd в другое имя (и постарайтесь никогда не давать пакетным файлам имена внутренних команд).
Второе. На Вашем скриншоте видны двойные прямые кавычки в имени одного каталога (чего не может быть по определению — надо полагать, в реальности там какие-то другие кавычки), угловые скобки (здесь, судя по опыту, — в реальности угловые кавычки-ёлочки). Вероятно, что-то наподобие такого и с третьим каталогом. Пакетные файлы имеют достаточно ограниченные возможности по работе с файлами и каталогами, содержащими в именах символы не из набора OEM/866. Посему предлагаю сразу переходить к WSH/PowerShell. Например: Скрытый текст
Код:
Get-ChildItem -Path "C:\Users\Admin\Desktop\12333" -Directory |` Кстати, интересная особенность — для виртуальных дисков, созданных командой subst, параметр -Directory командлета Get-ChildItem не может быть задействован (несмотря на то, что это хоть и виртуальная, но таки файловая система) ;). |
Iska, да имена там действительно "страшные"....
извините, как использовать? завернуть скрипт в my_test.WSH ? Попробовал запустить - пишет сценарий не указан... |
9119, сохраните код в файл с расширением «.ps1» в кодировке 65001/UTF-8. Однократно разрешите «ручками» исполнение локальных неподписанных скриптов в PowerShell:
Код:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned |
Iska,
да с powershell работает. Спасибо. А что на счет кириллицы? Такое сработает?
Код:
Get-ChildItem -Path "E:\!!АРХИВ\!временное\скрины" -Directory |` upd: сработает) |
Цитата:
|
Время: 20:46. |
Время: 20:46.
© OSzone.net 2001-