PDA

Показать полную графическую версию : [решено] список каталогов, где находятся 2 и более файлов


neprotiv
27-02-2010, 09:41
суть в чем. есть много каталогов, где находятся файлы *.txt *.doc
можно ли зделать так чтоб создавало список каталогов где находятся по 2 (и более) *.txt или по 2 (и более) *.doc

тоесть если

папка1\файл1.txt
папка1\файл2.txt
папка1\файл3.doc

папка2\файл1.txt
папка2\файл2.doc

папка3\файл1.txt
папка3\файл2.doc
папка3\файл3.doc

создало отчет что именно в папка1 и папка3 чтото не так
можно такое зделать?
спасибо за внимание

amel27
27-02-2010, 10:32
по 2 (и более) *.txt или по 2 (и более) *.doc »

@Echo Off

Set DIR=C:\TEST
Set MSK=*.txt *.doc

For /R "%DIR%" %%i In (.) Do If /I Not "%DIR%\."=="%%i" (
Set ERR=& PUSHD %%i
For /F %%a In ('2^>Nul DIR /B/A-D *.txt^|Find /C /V ""') Do If %%a GTR 1 Set ERR=1
For /F %%a In ('2^>Nul DIR /B/A-D *.doc^|Find /C /V ""') Do If %%a GTR 1 Set ERR=1

POPD& If Defined ERR Echo %%i
)

neprotiv
27-02-2010, 10:53
чтото не то....не работает...не выдает ошибку, не создает список
amel27, у вас оно точно работает?

amel27
27-02-2010, 11:05
у вас оно точно работает?»
тестовое окружение:

C:\TEST\папка1\файл1.txt
C:\TEST\папка1\файл2.txt
C:\TEST\папка1\файл3.doc

C:\TEST\папка2\файл1.txt
C:\TEST\папка2\файл2.doc

C:\TEST\папка3\файл1.txt
C:\TEST\папка3\файл2.doc
C:\TEST\папка3\файл3.doc

результат работы скрипта (на консоли):

C:\TEST\папка1\.
C:\TEST\папка3\.

как перенаправить вывод в файл:
test.cmd >test.log

neprotiv
27-02-2010, 11:37
хм..странно но заработало...большое вам спасибо за помощь

neprotiv
27-02-2010, 13:09
amel27, работает..но както не правильно.
показывает нужные директории и консоль закрывается
а если добавить эту строку:
test.cmd >test.log

то оно както странно сохраняет. на консоле показывает директории (и никуда не исчезает),
но когда открываешь лог то оно показывает сначала одну название папки, потом две, потом три итд.
а как только доходит до последней папки сразу все сначала записывается лог, при этом на консоле ничего не пишется

проверте это просто скопировав эти три тестовые папки по нескольку раз пожалуйста

amel27
27-02-2010, 15:33
скопировав эти три тестовые папки по нескольку раз пожалуйста »куда скопировав?.. давайте полный (воспроизводимый) расклад:
структура папок, входные параметры, результат работы батника/лог

neprotiv
28-02-2010, 04:05
при запуске сот строкой - test.cmd > test.log
на консоле видно что проверяет. как только закончило проверку так сразу создается лог файл. но он сохраняется бесконечно. вот так

текст в лог файое: (после того как сразу создался файл)
C:\TEST\папка1\.

потом обновляется (через секунду или 3)
C:\TEST\папка1\.
C:\TEST\папка3\.

потом (через секунду или 3)
C:\TEST\папка1\.
C:\TEST\папка3\.
C:\TEST\папка5\.

а когда эти папки заканчиваются то вновь переписывается лог и вновь показывает
C:\TEST\папка1\.

а на консоле как показывало так и показывает
C:\TEST\папка1\.
C:\TEST\папка3\.
C:\TEST\папка5\.

если закрыть test.cmd то в лог файле сохранится лишь та часть информации которая успела сохранится



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

@Echo Off

Set DIR=C:\TEST
Set MSK=*.txt *.doc

For /R "%DIR%" %%i In (.) Do If /I Not "%DIR%\."=="%%i" (
Set ERR=& PUSHD %%i
For /F %%a In ('2^>Nul DIR /B/A-D *.txt^|Find /C /V ""') Do If %%a GTR 1 Set ERR=1
For /F %%a In ('2^>Nul DIR /B/A-D *.doc^|Find /C /V ""') Do If %%a GTR 1 Set ERR=1

POPD& If Defined ERR Echo %%i
)

test.cmd > test.log

amel27
28-02-2010, 10:49
плюс одна строчка в конце »
эта строчка не из батника, а строка запуска этого батника
если нужно сразу из батника в файл, то можно так:

@Echo Off

Set DIR=C:\TEST
Set LOG=C:\TEST\TEST.LOG

For /R "%DIR%" %%i In (.) Do If /I Not "%DIR%\."=="%%i" (
Set ERR=& PUSHD %%i
For /F %%a In ('2^>Nul DIR /B/A-D *.txt^|Find /C /V ""') Do If %%a GTR 1 Set ERR=1
For /F %%a In ('2^>Nul DIR /B/A-D *.doc^|Find /C /V ""') Do If %%a GTR 1 Set ERR=1

POPD& If Defined ERR Echo %%i >>"%LOG%"
)

neprotiv
01-03-2010, 01:08
amel27, большое вам спасибо. теперь работает как часы
спасибо




© OSzone.net 2001-2012