Войти

Показать полную графическую версию : Прошу прокомментировать данный код


Чин Хон
06-03-2011, 15:39
Код:
@echo off

SETLOCAL EnableDelayedExpansion
for /f "delims==" %%a in ('ftype^|find /i "\notepad.exe"') do set "$f=!$f! /c:"=%%a""
for /f "delims==" %%a in ('assoc^|findstr/ie%$f%') do set "$x=!$x! %systemdrive%\*%%a"

SETLOCAL DisableDelayedExpansion
(for /f "delims=" %%a in ('dir /b/s/a-d %$x% 2^>nul') do (
for /f "tokens=1,2" %%b in ('dir/a/tc "%%a"^|findstr/iec:"%%~nxa"') do echo %%b %%c %%a
))>"%~dpn0.log"

Чин Хон
06-03-2011, 15:40
Я извиняюсь, что опять создал такую тему. Но очень нужно...

Это мне прокомментировал SendMessage, и я очень благодарен. Но нужно еще по подробнее:
ftype^|find /i "\notepad.exe"
Команда ftype выводит типы файлов и связанные с ними приложения. Например: inifile=%SystemRoot%\System32\NOTEPAD.EXE %1
Следующей командой - find /i "\notepad.exe" отбираются только те из них, что связаны с Блокнотом.
set "$f=!$f! /c:"=%%a""
Создается, скажем так, массив значений для использования в будущей команде findstr/ie%$f%. Выглядит, в конечном итоге, он примерно так: /c:"=inffile" /c:"=inifile" /c:"=Text" и т. д. То есть из всех типов файлов, связанных с Блокнотом.
assoc^|findstr/ie%$f%
Команда assoc выводит связанные с типами файлов расширения. Например: .txt=Text
findstr/ie%$f% отбирает только те расширения, что относятся к типам файлов, которые переданы в переменную %$f%. Смотрится примерно так: findstr/ie /c:"=inffile" /c:"=inifile" /c:"=Text"
set "$x=!$x! %systemdrive%\*%%a"
Снова создается массив значений, теперь уже для команды dir /b/s/a-d %$x% 2^>nul. Он состоит из масок для вывода файлов. Примерно такой: %systemdrive%\*.ini %systemdrive%\*.inf %systemdrive%\*.txt. Где %systemdrive% - системный диск.
dir /b/s/a-d %$x% 2^>nul
Выводятся все файлы на диске, соответствующие маскам (dir /b/s/a-d %systemdrive%\*.ini %systemdrive%\*.inf %systemdrive%\*.txt). 2^>nul - игнорировать ошибки.
dir/a/tc "%%a"^|findstr/iec:"%%~nxa"
Получение времени создания файла. %%a - полученное имя файла из вышестоящего цикла. findstr/iec:"%%~nxa" - ищется строка с именем файла, поскольку командой dir/a/tc выводится несколько строк, а нужна именно строка с именем файла. tokens=1,2 - из этой строки отбираются только 1 и 2 элементы, разделенные пробелами (табуляцией). В переменную %%b помещается дата создания файла, в переменную %%c - время.
Остальное все, я думаю, не представляет сложности для понимания.




© OSzone.net 2001-2012