Недавно я опубликовал вопрос о пропуске определенных папок при использовании findstr
. (Кстати, это был мой первый вопрос здесь, и на него были получены фантастические ответы! Спасибо, сообщество Stack Overflow!) Теперь я также хотел бы пропустить некоторые типы файлов. То есть я не хочу, чтобы findstr
даже пытался искать файлы с расширениями, например, .pdf, .r и .sas. Однако я хочу искать файлы .sas7bdat, поэтому исключения случаев, когда имя файла вообще содержит «.sas», недостаточно. Мой код в его нынешнем виде выглядит следующим образом:
@echo off
setlocal EnableDelayedExpansion
set basedir=N:\folder
set outfile=N:\folder\Projects\list.txt
if exist %outfile% then del %outfile%
findstr /mil frecord "%basedir%\*" > %outfile%
for /f "eol=: delims=" %%g in (
'dir /a:d-h /b %basedir% ^| findstr /vixl "projects requests temp"'
) do findstr /smil frecord "%basedir%\%%g\*" >> %outfile%
set basedir=
set outfile=
Это захватывает все файлы в %basedir%
, которые содержат строку «frecord», и выполняет поиск во всех подпапках %basedir%
, кроме Projects, Requests и temp. Результаты записываются в %outfile%
.
Каталог %basedir%
и его вложенные папки довольно велики, поэтому мне нужно убедиться, что findstr
не отнимает лишнего времени на поиск типов файлов, которые не представляют интереса. Однако я не уверен, где ограничение в приведенном выше коде. Цикл FOR перебирает только каталоги в пределах %basedir%
, а не конкретные файлы. Требуется ли для этого второй аналогичный цикл FOR? Если да, то куда он пойдет? Или, возможно, есть более простой подход? Я новичок в пакетном программировании Windows, поэтому, пожалуйста, простите меня, если ответ слишком очевиден.
Любые советы или рекомендации будут высоко оценены. Большое спасибо!
-Алекс