2012-03-05 4 views
0

У меня есть имена файлов, как это:Регулярное выражение в Win7?

M0654871_07_05_2011.pdf
M0654871_07_15_2011.pdf

Где 07_05_2011 является дата (mm_dd_yyyy) и первый номер после M просто "случайное" число.

Я пишу файл .bat, который перебирает все файлы в этом каталоге. Я хочу, чтобы скрипт подсчитывал файлы в каждый день (на основе имени файла, а не даты).

Кажется, что нет никакого регулярного выражения в пакетном сценарии. Есть ли способ сделать это в Windows .bat-скриптах без загрузки дополнительных инструментов/программного обеспечения?

(Возможно, я мог бы сделать жесткий цикл проверки строки по каждой строке имени файла за каждый день, но это немного связано с наличием 10k + файлов).

Я обнаружил, что findstr может делать регулярное выражение в некотором смысле, но есть ли способ использовать его для перебора файлов и вытаскивания количества файлов за дату, вместо того, чтобы перебирать даты и вытаскивать количество файлов?

ответ

1

В FINDSTR ничего не делать, чтобы делать то, что вы хотите напрямую, но это легко сделать с циклом FOR, соединенным с подстрокой расширения и арифметикой SET.

Следующий код (без FINDSTR) может быть достаточно хорошим, в зависимости от того, какие другие файлы могут существовать в каталоге (не проверены, но должны работать, если только я не пропущу глупую ошибку). Код работает, создавая переменную count с именем, основанным на дате в имени файла.

@echo off 
setlocal enableDelayedExpansion 
for %%F in (M*_??_??_????.pdf) do (
    set "fname=%%~nF" 
    set /a fileDate_!fname:~-10!+=1 
) 
set fileDate_ 

Если вы хотите более точно найти действительные даты в течение последних 10 символов имени, то вы можете трубы выход DIR на Findstr регулярное выражение. (Опять непроверенный)

@echo off 
setlocal enableDelayedExpansion 
for /f %%F in ('dir /b M*_??_??_????.pdf ^| findstr /lixc:"M[0-9]*_[01][0-9]_[0-3][0-9]_[0-9][0-9][0-9][0-9]') do (
    set "fname=%%~nF" 
    set /a fileDate_!fname:~-10!+=1 
) 
set fileDate_ 

Регулярное выражение, точно не ограничивая себя действительные даты, но скорее всего она адекватна. Вы можете быть более точным, используя несколько строк поиска регулярных выражений, но суровые ограничения FINDSTR усложнят, чем это должно быть (см. What are the undocumented features and limitations of the Windows FINDSTR command?)

Смежные вопросы