|
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 11
|
|||||||||||
Проверка папки на наличие файлов и её очистка с выводом сообщения22.06.2016, 04:06. Показов 12159. Ответов 25
Метки нет (Все метки)
Всем доброго времени суток.
Выложу сразу код:
Хотел написать маленький батник на проверку и очистку файлов в папке, а в последующем - нескольких папок. Проблема заключается в условии if. При запуске батника, сразу идёт к выполнению :del1. При этом, заменяя вывод сообщения (echo) при errorlevel'е равном 1-му на переход к метке, к примеру:
Надеюсь на вашу помощь, уважаемые форумчане. Сам я не особо силён в этой сфере, т.к. только недавно в неё окунулся. Хотелось бы разобраться, где моя ошибка.
0
|
|||||||||||
| 22.06.2016, 04:06 | |
|
Ответы с готовыми решениями:
25
Определение нужной папки и проверка на наличие в ней файлов |
|
Любознательный
7401 / 2247 / 359
Регистрация: 10.03.2016
Сообщений: 5,187
|
||||||||||||||||||||||
| 22.06.2016, 06:07 | ||||||||||||||||||||||
1
|
||||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 11
|
|
| 22.06.2016, 14:23 [ТС] | |
|
Подумал, что мой косяк и глаза замылились.
Но, увы, варианты с %errorlevel%==... и errorlevel 1 тоже не сработали. И это странно, что с echo не работает, а с goto всё работает как надо. Но через "goto" не вариант. Т.к. папок будет больше в дальнейшем. И прописывать для каждой условия с бесконечными переходами "goto" напряжно и громоздко. Проверка нужна, т.к. делаю не для себя. И как я понял, этот аспект важен. В идеале, нужно ещё и кол-во удалённых файлов вывести и общий вес. Может проблема в синтаксисе? но я сколько не прошаривал глазами, ничего не заметил.
0
|
|
|
Любознательный
7401 / 2247 / 359
Регистрация: 10.03.2016
Сообщений: 5,187
|
||||||||||||||||||||||||
| 22.06.2016, 20:17 | ||||||||||||||||||||||||
Сообщение было отмечено John Doe как решение
Решение
теперь проделайте то же самое, для этого пакета:
Добавлено через 5 часов 16 минут
1
|
||||||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 11
|
|
| 23.06.2016, 02:29 [ТС] | |
|
Действительно работало с goto. Выдавало echo если папка пуста. И когда для теста накидывал файлы, работал 2 вариант условия. Но после теста параметра /a-d и /a:d, понял, что работало всё некорректно. Пуста папка или нет /a:d возвращает 0.
/a-d возвращает errorlevel 1 если папка пуста и 0 если есть файлы. Но! Если в папке нет файлов с расширениями, а только подпапки (пустые или с файлами - без разницы, тестил), errorlevel всё равно выдаёт 1, как будто папка пуста. Как мне поступить в этом случае. Какие есть идеи? Чтобы проверял как наличие файлов так и папок. Я вроде не глупый, но только недавно начал в этом плавать. Поэтому извиняюсь за свои тормоза. Код, который вы написали, я так понял, ведёт подсчёт файлов и веса. Хотелось бы понять, что к чему и почему. Если не составит труда, прокомментируйте строки вашего кода, дабы до меня дошло сие чудо вашей мысли Буду признателен.
0
|
|
|
Любознательный
7401 / 2247 / 359
Регистрация: 10.03.2016
Сообщений: 5,187
|
|||||||||
| 23.06.2016, 06:17 | |||||||||
|
После чего измените код на такой:
1
|
|||||||||
|
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 11
|
|
| 23.06.2016, 20:44 [ТС] | |
|
Заменил ключ /a-d на /a, хотя я в принципе уже так пробывал. При любом раскладе даёт 0.
Протестировал ключ /s/a-d. Если есть файлы, выдаёт 0. Если есть папки с файлами, выдаёт ноль. Но если есть пустые папки, выдаёт 1. Научит, если объяснить, что именно проделывает команда и её параметры. Справкой в cmd я пользоваться умею. К сожалению, не всё в ней предельно ясно и однозначно. Разве что, для опытных людей в этом деле. Касательно кода, что вы написали. Я так понял, что его нужно запускать из папки, которую чистим? Я подставил соответствующие папки в df1 и df2. Скажем так, ничего нигде не тронуло. А вот рабочий стол мой почти весь снесло, включая файлы которые были мне нужны. Ну да не столь важны теперь. Остались разве что ярлыки, выборочно. Часть снесло, часть оставило. И сам себя батник снёс. В логе подсчёт файлов - 0, объём - 0. И перечислены файлы и каталоги, которые были удалены.
0
|
|
|
Любознательный
7401 / 2247 / 359
Регистрация: 10.03.2016
Сообщений: 5,187
|
|||||||
| 23.06.2016, 21:43 | |||||||
Сообщение было отмечено John Doe как решение
РешениеВообще, если проводите какие-либо эксперименты, особенно с потенциально деструктивными действиями, то лучше сначала выводить всё с помощью команды echo в консоль или в файл и только убедившись в том, что всё работает как надо, заменять вывод на реальные команды. Вот код с комментариями:
1
|
|||||||
|
2 / 2 / 1
Регистрация: 23.04.2015
Сообщений: 56
|
||||||
| 24.06.2016, 14:29 | ||||||
0
|
||||||
|
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 11
|
||||||
| 25.06.2016, 06:07 [ТС] | ||||||
Всё чистит. Но, предположим, что какая то директория может быть удалена. Боюсь того же, что случилось с моим десктопом. Думал, как бы всунуть сюда проверку заданной директории на существование. Как-то у меня не срослось, ведь они все в теле цикла For. Касательно данного батника и комментариев. Задали некие переменные n и m для счётчика. После собственно реализуется сам счётчик, не совсем понял, почему переменной %%a нужна именно 3-я подстрока tokens. что делает ^|findstr /rc:"^[^ ] в этом цикле я так же не догнал. Далее за каждый обработанный файл переменной n присваевается 1, и того с миру по нитке во что-нибудь да выльется. Переменной %%a передаётся вес каждого файла и это всё тикает в переменную m. Далее всю эту информацию мы выводим в лог-файл. Следующий цикл реализует удаление каталогов и файлов в указанной директории. переменной %%i передаётся каждый "файл" и если это каталог, передаётся соответствующая информация в лог-файл и делается чёрное дело. Затем подчищаются все оставшиеся файлы в основной директории и информация снова передаётся в лог. Если где-то не так понял, поправьте. И если не затруднит, прошу дать толчка там, где я не догнал. Так как же здесь реализовать проверку заданного каталога на истинность. Ведь все директории прописываются в цикл, независимо от того, реальны они или нет. Пробовал реализовать вывод информации об удалении на экран без лог файла. Вывод информации об удалённом файле дублируется. А каталог выводится и как удалённый каталог и как файл с тем же путём каталога. Если передавать в лог, то всё в порядке. Очень благодарен, что вы терпимо тратите на меня своё время!
0
|
||||||
|
Любознательный
7401 / 2247 / 359
Регистрация: 10.03.2016
Сообщений: 5,187
|
||||||||||||||||||||
| 25.06.2016, 10:26 | ||||||||||||||||||||
1
|
||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 11
|
|
| 25.06.2016, 16:10 [ТС] | |
|
Спасибо за разъяснения! Теперь, вроде, всё предельно ясно)
![]() Что касается проверки заданных каталогов. Ваш вариант рассматривался. Проблема в том, что если хотя бы 1 или 2 директории не существует, а 3-ей нужна очистка, очистки не будет, т.к. при ложности 1 или 2 (или 1 и 2) батник завершается. А в цикле прописаны все 3 директории. И если его запускать при несуществующих папках, может повториться то, чего я опасаюсь.
0
|
|
|
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
|
|||||||||||
| 25.06.2016, 16:22 | |||||||||||
|
John Doe,
Если хотите жестко перестраховаться, то можно делать так:
0
|
|||||||||||
|
Любознательный
7401 / 2247 / 359
Регистрация: 10.03.2016
Сообщений: 5,187
|
|||||||
| 25.06.2016, 19:09 | |||||||
Сообщение было отмечено John Doe как решение
Решение
Этот код можно запустить отдельно, для проверки того, что получим на выходе...
1
|
|||||||
|
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 11
|
||||||
| 27.06.2016, 17:19 [ТС] | ||||||
И объясните те моменты которые не догнал. Хочу понять всю структуру и каждые строчки кода для "общего своего" развития. Как я понял, в цикл очистки подставляется %dext%?
0
|
||||||
|
Любознательный
7401 / 2247 / 359
Регистрация: 10.03.2016
Сообщений: 5,187
|
||||||||||||||
| 27.06.2016, 22:19 | ||||||||||||||
Сообщение было отмечено John Doe как решение
РешениеА именно call, в этой строке:
Для простоты понимания, можно это представить так:
1
|
||||||||||||||
|
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 11
|
||||||||||||
| 28.06.2016, 01:15 [ТС] | ||||||||||||
|
Ну про подпрограмму с меткой :dper я врубил. Маленькая программа в программе. И вызывается для каждого числа от 1 до 3.
Только всё равно не понимаю почему
Просто если dext присваивает себе новое значение, где же старое? и откуда взялось %dext%, какое у него старое значение, если ранее dext нигде не фигурировало. В приведённом примере есть переменная "dext" со значением "abc". Тут всё предельно ясно. А в вашем коде врезки dext нигде не фигурировал до того момента, пока ему не присвоили "%dext% "%var%"" с неведомым старым значением. Потому я и не могу догнать.
0
|
||||||||||||
|
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
|
||||||
| 28.06.2016, 02:51 | ||||||
|
John Doe,
все не так сложно ведь команда
чего тогда проблема если нет переменной присвоить значение когда таковое соблаговолит появиться это приблизительное объяснение, но доходчивое. Добавлено через 2 минуты а без помощи call не раскрыть или не присвоить переменную в переменной (съест обрамляющие %%), в справке это есть.
0
|
||||||
|
0 / 0 / 0
Регистрация: 15.06.2016
Сообщений: 11
|
|
| 28.06.2016, 03:21 [ТС] | |
|
Т.е. изначально dext=%dext% "%var%"
где %dext% пока ещё не имеет значения, дальше: пробел и d1. И теперь dext имеет значение " "%d1%"" Далее к нему прибавляется новое значение из %var%. Т.е. "пробел%d2". И того dext равен уже " "%d1%" %d2%"" и т.д. По идее дошло. Если я правильно всё понимаю.
0
|
|
|
Любознательный
7401 / 2247 / 359
Регистрация: 10.03.2016
Сообщений: 5,187
|
||
| 28.06.2016, 05:40 | ||
Сообщение было отмечено John Doe как решение
РешениеПо остальному, вроде Вы разобрались.
1
|
||
| 28.06.2016, 05:40 | |
|
Помогаю со студенческими работами здесь
20
Очистка папки от файлов Проверка наличие папки на сервере Проверка на наличие папки и запуск Проверка на наличие папки и файла
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
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
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|