|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удалить все папки, внутри которых есть файл с определённым имменем. |
|
CMD/BAT - [решено] Удалить все папки, внутри которых есть файл с определённым имменем.
|
Старожил Сообщения: 286 |
Добрый.
Есть папка...скажем 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*.* - ничего не трогать/не удалять. Надеюсь понятно описал. Спасибо. |
|
Отправлено: 19:41, 01-03-2020 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата 9119:
Пробуйте: Скрытый текст
Учтите, что до: Цитата 9119:
|
||
Отправлено: 20:09, 01-03-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 286
|
Профиль | Отправить PM | Цитировать Тестирую на Win10.
В C:\Users\Admin\Desktop\12333 лежит еще 3 папки с файлом tts.txt на разных уровнях подпапок. добавил паузы для наглядности. Скрытый текст
ничего не происходит.. . первая pause срабатывает, второй нет. После первой паузы "блымнуло" и всё) |
Отправлено: 20:19, 01-03-2020 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать 9119, не надо пауз. Откройте окно интерпретатора команд (Win-R, «cmd.exe», Enter), перетащите в него из Проводника пакетный файл, нажмите Enter.
Вот Вам код для отладки: Скрытый текст
@echo off setlocal enableextensions enabledelayedexpansion 2>nul pushd "C:\Users\Admin\Desktop\12333" && ( cd for /f "usebackq delims=" %%i in (`2^>nul dir /a:d /b "*.*"`) do ( echo [%%~i] echo ---------------------------- dir /a:-d /b /s "%%~i\*tts*.*" echo ---------------------------- >nul 2>&1 dir /a:-d /b /s "%%~i\*tts*.*" && rd /s /q "%%~i" ) ) & popd endlocal exit /b 0 покажите его вывод. |
Отправлено: 20:26, 01-03-2020 | #4 |
Старожил Сообщения: 286
|
Профиль | Отправить PM | Цитировать Скрытый текст
C:\Users\Admin>C:\Users\Admin\Desktop\12333\del.cmd C:\Users\Admin\Desktop\12333 [Россия прижала "великую" Аmериkу к стене] ---------------------------- Не удается найти указанный файл. ---------------------------- [США nрuговоpили - Планы на будущее <незалежной> строят в Вашингтоне] ---------------------------- Синтаксическая ошибка в имени файла, имени папки или метке тома. ---------------------------- [Три признака того, что Зеленский не станет президентом Украины] ---------------------------- Не удается найти указанный файл. ---------------------------- C:\Users\Admin> файлы вида *tts*. * есть во всех 3 папках, на разных уровнях. |
|
Последний раз редактировалось 9119, 01-03-2020 в 21:09. Отправлено: 20:35, 01-03-2020 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать 9119, для начала переименуйте Ваш del.cmd в другое имя (и постарайтесь никогда не давать пакетным файлам имена внутренних команд).
Второе. На Вашем скриншоте видны двойные прямые кавычки в имени одного каталога (чего не может быть по определению — надо полагать, в реальности там какие-то другие кавычки), угловые скобки (здесь, судя по опыту, — в реальности угловые кавычки-ёлочки). Вероятно, что-то наподобие такого и с третьим каталогом. Пакетные файлы имеют достаточно ограниченные возможности по работе с файлами и каталогами, содержащими в именах символы не из набора OEM/866. Посему предлагаю сразу переходить к WSH/PowerShell. Например: Скрытый текст
Кстати, интересная особенность — для виртуальных дисков, созданных командой subst, параметр -Directory командлета Get-ChildItem не может быть задействован (несмотря на то, что это хоть и виртуальная, но таки файловая система) ![]() |
Отправлено: 21:20, 01-03-2020 | #6 |
Старожил Сообщения: 286
|
Профиль | Отправить PM | Цитировать Iska, да имена там действительно "страшные"....
извините, как использовать? завернуть скрипт в my_test.WSH ? Попробовал запустить - пишет сценарий не указан... |
Отправлено: 21:31, 01-03-2020 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать 9119, сохраните код в файл с расширением «.ps1» в кодировке 65001/UTF-8. Однократно разрешите «ручками» исполнение локальных неподписанных скриптов в PowerShell:
Затем исполняйте скрипт таким же макаром, только вместо cmd.exe используйте powershell.exe. |
Отправлено: 21:41, 01-03-2020 | #8 |
Старожил Сообщения: 286
|
Профиль | Отправить PM | Цитировать Iska,
да с powershell работает. Спасибо. А что на счет кириллицы? Такое сработает?
upd: сработает) |
Последний раз редактировалось 9119, 01-03-2020 в 21:55. Отправлено: 21:49, 01-03-2020 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата 9119:
|
|
Отправлено: 22:26, 01-03-2020 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Удалить папки, в которых отсутствуют вложенные подпапки | aries15ssh | Скриптовые языки администрирования Windows | 1 | 17-09-2019 15:47 | |
CMD/BAT - Удалить все папки и файлы кроме определенных 2 папок и 2 файлов | komilfo | Скриптовые языки администрирования Windows | 2 | 18-01-2018 09:08 | |
CMD/BAT - Удалить все папки и содержимое папок с диска | levjenia | Скриптовые языки администрирования Windows | 3 | 19-01-2015 16:17 | |
Любой язык - Есть необходимость создать для каждой папки файл с содержимым папки | Super_Kolobok | Скриптовые языки администрирования Windows | 2 | 01-11-2013 16:29 | |
V. 2007 - Удалить файл из общей папки. | Traktorist | Microsoft Exchange Server | 0 | 17-05-2011 15:03 |
|