Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Прошу прокомментировать данный код

Закрытая тема
Настройки темы
CMD/BAT - Прошу прокомментировать данный код

Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Код:
@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"

Отправлено: 14:53, 27-02-2011

 

Старожил


Сообщения: 175
Благодарности: 119

Профиль | Отправить PM | Цитировать


По хорошему, amel27 должен отвечать - его код. Но рискну.

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

Последний раз редактировалось SendMessage, 28-02-2011 в 08:08.

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:02, 28-02-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо!
А "SETLOCAL EnableDelayedExpansion" что?

Отправлено: 15:06, 28-02-2011 | #3


Аватара для Nun-Nun

Ветеран


Сообщения: 2153
Благодарности: 294

Профиль | Отправить PM | Цитировать


Чин Хон,

Инфа из интернета:
Цитата:
В обычном случае, чтобы узнать значение переменной окружения, надо воспользоваться конструкцией %переменная%. Однако, если значение переменной меняется внутри цикла и читается там же, то для корректной работы батника, нужно использовать команду setlocal enabledelayedexpansion и вместо символа "%", использовать символ "!". Иначе, значение переменной в цикле будет всегда одним и тем же - таким, каким было до входа в цикл.

-------
Свобода не означает вседозволенность.


Отправлено: 17:09, 28-02-2011 | #4


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Ясно, спасибо!

Отправлено: 21:11, 28-02-2011 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Прошу прокомментировать данный код

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - Прошу прокомментировать Чин Хон Программирование и базы данных 4 17-02-2011 17:35
Разное - [решено] Автоматическая смена обоев в w7, как узнать имя обоины отображенной в данный baldafon Microsoft Windows 7 3 13-06-2010 04:59
EventID - Код: 6006 , код: 6009, код: 6005. Источник - Eventlog. Panathinaikos Устранение критических ошибок Windows 6 15-04-2010 16:22
[решено] Прошу посодействовать в подборе конфигурации сис.блока(актуального на данный момент) cr3w Выбор отдельных компонентов компьютера и конфигурации в целом 25 24-08-2009 22:11




 
Переход