Цитата: не мог бы кто-нибудь пояснить этот кусочек когда-то приведенного тут кода...прям по частям по буковкам если можно...
Действительно, связно объяснить сложно. Надеюсь, объясню кое-что:
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" - удалить файл без запроса подтверждения.