Tipulatoid
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: не мог бы кто-нибудь пояснить этот кусочек когда-то приведенного тут кода...прям по частям по буковкам если можно... | Действительно, связно объяснить сложно. Надеюсь, объясню кое-что: for /f "tokens=*" %%i in ('dir /b /s /a c:\1') do (echo %%~ti | findstr /v %date% 1>nul && del /q "%%i") For (цикл) - конструкция, позволяющая выполнять команды (они идут после DO) для каждого из элементов выбранного множества Какое именно множество будет обрабатываться циклом - указываем в первых скобках после IN В нашем случае множество это - вывод команды dir /b /s /a c:\1 Набери ее в консоли без кавычек и посмотри результат. Разберем ее: dir - выводит список файлов и папок c:\1 - целевая папка, чье содержимое надо отобразить /b - ключ, указывающий выводить только имена файлов и папок, без прочей информации /s - показать содержимое не только целевой папки, но и ее подпапок /a:-d - из всего содержимого выводить все НЕпапки, т.е. файлы Поиграй с командой dir , добавляя/удаляя ключи и посмотри результаты итак, в целом dir /b /s /a c:\1 выводит только имена файлов в целевой папке и ее подпапках. Эти имена мы и обрабатываем командами, идущими после DO Дальше разберем for "delims=?" (в данном примере нет за ненадобностью) нужно для того, что разбить обрабатываемый элемент множества на части. Например, пусть разбираемый элемент у нас - фраза "в пруду рыба" Если у нас стоит "delims=р" мы разобьем ее на 3 части: "в п" ; "уду " ; "ыба" и можем по отдельности подставлять их в команды после DO Если бы было в нашем рассматриваемом примере "delims=.", например, то мы бы разбили каждый элемент множества (т.е. имена файлов) на части - собственно имя и расширение и могли бы работать с ними по отдельности. Если "delims=" не указан прямо (как в нашем случае), то разделителем считается знак пробела "tokens=?" нужно для того, чтобы указать какие части элемента множества нам нужно взять для обработки в командах после DO. В примере с фразой "в пруду рыба" "delims=p tokens=1,3" означает, что мы выбираем для обработки 2 части элемента множества - "в п" и "ыба" ; "delims=p tokens=1-3" - означает, что берем части с 1-ой по 3-ью. в нашем случае "tokens=*" без всякого delims - говорит что для обработки мы будем брать элемент множества целиком, не разбивая его на части. %%i - это как мы будем обозначать первую часть каждого элемента множества для подстановки его в командах, идущих после DO В нашем случае мы берем весь элемент множества (имя файла) целиком, и потому 2-ой, 3-ей и т.д. части нет. Если бы они были, мы бы обозначали в командах после DO 2-ую часть - %%j 3-ью -%%k и т.д., т.е. по алфавиту. Далее, команды, идущие после DO, т.е. собственно, что нужно сделать с каждым элементом множества echo %%~ti | findstr /v %date% 1>nul && del /q "%%i" echo %%~ti %%~t? - этот модификатор сообщает дату последней модификации файла. Поскольку в %%i у нас забито имя обрабатываемого файла, то модификатор выведет дату последнего его изменения. | - приказывает передать вывод предыдущей команды (т.е. дату модификации файла) для обработки следующей. findstr /v %date% 1>nul %date% - системная переменная, в которой содержится текущая дата. Набери echo %date% в консоли. findstr - поиск строки-образца (в нашем случае текущей даты) в выводе предущей команды. findstr /v - вывод всех строк, что НЕ совпадают с образцом 1>nul не выводить на экран сообщения об ошибке в случае, если выводить нечего. В целом вся команда - отфильтровать вывод от echo %%~ti , пропустить далее только то, что не содержит текущую дату, сообщения об ошибках не выводить. && - в случае успеха предыдущей команды (т.е. если через фильтр findstr прошло что-либо) del /q "%%i" - удалить файл без запроса подтверждения. | Всего записей: 349 | Зарегистр. 22-12-2006 | Отправлено: 07:57 25-04-2008 | Исправлено: Tipulatoid, 14:55 25-04-2008 |
|