В продолжение предыдущей статьи, мы рассмотрим поиск файлов через командную строку с помощью утилиты Dir. Утилита dir как правило используется для вывода списка файлов и каталогов в заданной папке, но так как с помощью параметров можно указать фильтр для выводимой информации, то утилита командной строки подходит и для поиска файлов или каталогов. Но, прежде, немного лирики…
Как то я наблюдал такую ситуацию: женщина заходила в социальную сеть Однокласники, потом вставляла в CR-ROM диск, на котором были ее фотки с любимым котом Мурзиком. Естественно, автоматически выскакивало диалоговое окно, в котором была вкладка, вроде, точно не помню, “Копировать изображения”, женщина благополучно на нее нажимала и ждала, что все фотографии автоматически появятся на ее станице в Однокласниках. Это меня конечно улыбнуло, стоит заметить настойчивость данной дамы, так как она повторяла процесс по несколько раз и в итоге неудач, пожаловалась на качество интернет услуг. В добавок, она умудрилась установить в системе сразу две антивирусные программы (NOD и Касперский), в итоге, Windows висел не по детски.
Командная строка dir
Утилиту dir можно использовать на ровне с утилитами find и findstr. В данной статье будет рассмотрен скрипт поиска файла в командной строке Windows. Прежде чем приступать к написанию примера, давайте рассмотрим, с какими ключами работает утилита DІR:
DIR [диск: ] [путь] [имя_файла] [/А[ [ : ]атрибуты] ] [/B] [/C] [/D] [/L] [/N] [/ 0[[:] порядок]] [/P] [/Q] [/S] [/Т[[:]дата]] [/W] [/X] [/4]
[диск: ] [путь] – тут нужно указать имя диска и каталога, содержимое которых надо показать
[имя_файла] – говорит о том, что надо включить в список имена, которые надо показать, как вы уже догадались, тут можно использовать и подстановочные знаки: * или ?. Для примера, на диске D я создал папку TEST, в которую поместил несколько документов различного типа:
- generate.mf
- infosys.mf
- sysinfo.mf
- xa_032.рdf
- xa_033.рdf
- xa_034.рdf
- xa_035.рdf
- xa_036.рdf
- xa_037.pdf
- send_mail_data.vbs.txt
- send_mail_text.vbs.txt
- subdomen_scan.wsf.txt
Стоит помнить, что для параметра [имя_файла] нельзя задать через запятую собственную цепочку. Теперь для разминки, осуществим поиск файла через командную строку с расширением pdf. Для этого пропишем:
Dir d:test*.pdf
После выполнения заданной команды, мы увидим только те документы, которые имеют расширение pdf.
Хорошо, продолжим рассмотрение ключей:
[/А[ [ : ]атрибуты] ] – использование данного ключа позволяет отфильтровать вывод списка по атрибутам, которые могут принимать следующие значения, их можно использовать совместно:
D – собственно, только папки
H – включает вывод только скрытых документов
S – включает вывод только системных документов
R – атрибут файла “только чтение”
A – атрибут файла “архивный”
— – данный префикс имеет значение НЕ
Если ключ /А отсутствует, то произойдет вывод всех файлов и папок, кроме тех, которые являются скрытыми и системными, если же данный параметр прописан без атрибутов, то произойдет вывод всех документов, включая скрытые и системные.
Примеры:
DIR C: /A:HS – вывод только тех, которые имеют атрибуты «скрытый» и «системный».
DIR С: /А:-Н – вывод всех, кроме скрытых.
DIR С: /A:D – выводим список всех каталогов
/В – перечисляет только названия каталогов и имена файлов (в длинном формате) по одному на строчку, включая расширение. При этом выводится только основная информация, без итоговой.
/S –просмотреть информацию не только из текущего каталога, но и из его подпапок
Ну, теперь для написания скрипта, который осуществит поиск файлов в командной строке, информации достаточно. Цель такова, написать батник (searchfiles.cmd) которому будут передаваться два аргумента: путь к диску или каталогу и шаблон, по которому будет происходить поиск файла через командную строку Windows. И так, смотрим на пример:
@If "%1"=="" (Set pathf=D:test) else (Set pathf=%1)
@If "%2"=="" (Set exmf=*.pdf) else (Set exmf=%2)
Dir %pathf%%exmf% /s
В первой строчке мы проверяем наличие первого аргумента, если он пуст, то, переменная pathf будет содержать путь по умолчанию D:test. Во второй – происходит проверка на второй аргумент и аналогично, при его отсутствии, переменная exmf получает значение по умолчанию *.pdf. В последней строчке будет происходить поиск файлов в командной строке по заданному шаблону.
Не стоит забывать, что сервер сценариев Windows Script Host для работы с каталогами использует объект Folder, который значительно превосходит по возможностям утилиту командная строка dir.
Правильно наравне, а не «на ровне».
Прошу прощения у автора. Погорячился. Очень интересно и удобно, спасибо за подсказку. Не пользовался, теперь буду знать! Пожалуйста, когда технологию описывайте, указывайте системы! Для 7 и выше есть более подходящая команда — where. Для XP, 2003 сервер — как альтернатива findstr, да не плохо. Но в любом случае — альтернатива и не лишена удобства. Ещё раз прошу извинить — погорячился.