Попытка использовать SUB-SELECT в logparser для получения информации о папке

Моя конечная цель - вернуть данные с помощью анализатора журнала в таблице, подобной этой

PATH      QTY       SIZE(KB)
C:\Path\dir     1200         150223

Я могу представить запрос в уме, но мне кажется, что я что-то упускаю. (Наверное, это очевидно). Вот мой запрос, как у меня сейчас:

C:\scripts>logparser -i:fs "SELECT f.* FROM (SELECT path FROM C:\DOWNLOADS\*.* WHERE ATTRIBUTES LIKE 'D%') f"

Я получаю эту ошибку: «Ошибка: синтаксическая ошибка: ожидается ключевое слово FROM вместо токена« * »»

Если я немного изменю свой код на следующий, я получу еще одну любопытную ошибку...

C:\scripts>logparser -i:fs "SELECT * FROM (SELECT path FROM C:\DOWNLOADS\*.* WHERE ATTRIBUTES LIKE 'D%')"

Я получаю сообщение об ошибке: «Не удается открыть: ошибка поиска файлов в папке C:\scripts (ВЫБЕРИТЕ путь ИЗ C:\DOWNLOADS: неверный синтаксис имени файла, имени каталога или метки тома.

Я хотел бы вернуть размер различных подкаталогов ниже пути c:\downloads. Я бы отрегулировал подстановочные знаки, чтобы еще больше сузить результаты.

РЕДАКТИРОВАТЬ. Дополнительная информация. Я надеюсь вернуть данные из структуры, подобной этой:

TopFolder
|_SubFolder
| |_SubSubFolder1
| |_SubSubFolder2
| |_SubSubFolder3
|_OtherFolder

Возвращает таблицу или какую-либо форму данных, например:

_FolderName___Qty____AvgSize____MaxSize____MinSize
SubSubFolder1  250    334533      45000     445
SubSubFolder2  123     4443       2233      344
....

person gritts    schedule 25.08.2014    source источник


Ответы (2)


Ну, во-первых, LogParser не поддерживает вложенные SELECT. При этом неясно, зачем вам нужен дополнительный выбор. Если вы хотите ограничить глубину поиска в каталоге, например, до 2, вы можете использовать '-recurse:2'. С другой стороны, если вы хотите суммировать все файлы ниже каталога, вам нужно ВЫБРАТЬ СУММУ (размер) и СГРУППИРОВАТЬ ПО с EXTRACT_PREFIX, указав уровень; Например:

SELECT EXTRACT_PREFIX(Path, 2, '\\') AS MyFolder, SUM(Size)
FROM C:\Downloads\*.*
GROUP BY MyFolder
person Gabriele Giuseppini    schedule 28.08.2014
comment
Спасибо за ваш ответ @Gabriele. Я принял ваше предложение и придумал logparser select EXTRACT_PREFIX(Path,2,'\\') as FolderName,Count() AS ItemCount,DIV(sum(size),1024) as KBSize from :\downloads*. group by FolderName HAVING ItemCount › 1 -i:fs Я заметил, что для каждой возвращаемой папки счетчик увеличивается на 3. Папка, содержащая 5 файлов, возвращает счетчик 8. Если бы была подпапка с файлами, она бы быть дополнительным 3. Любые предложения по подсчету файлов в одиночку? - person gritts; 15.10.2014
comment
Вы считаете «.», «..» и сам каталог. Вы можете фильтровать атрибуты и исключать каталоги. - person Gabriele Giuseppini; 15.10.2014

Взяв информацию, предоставленную @Gabriele, я придумал следующий запрос logparser, который соответствует моим потребностям...

logparser "select EXTRACT_PREFIX(Path,2,'\') as FolderName,Count() AS ItemCount,DIV(sum(size),1024) as KBSize from c:\downloads*. WHERE Attributes NOT LIKE 'D%' group by FolderName HAVING ItemCount > 1" -i:fs

Моя конечная цель — собирать статистику по сетевым папкам, заполненным автоматизированными процессами, для отслеживания прогресса. Источник "c:\downloads" будет заменен другим источником.

person gritts    schedule 16.10.2014