Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Прошу прокомментировать данный код (http://forum.oszone.net/showthread.php?t=201278)

Чин Хон 06-03-2011 15:39 1628607

Прошу прокомментировать данный код
 
Код:
@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 1628608

Я извиняюсь, что опять создал такую тему. Но очень нужно...

Это мне прокомментировал 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 - время.
Остальное все, я думаю, не представляет сложности для понимания.


Время: 22:05.

Время: 22:05.
© OSzone.net 2001-