Показать полную графическую версию : [решено] список каталогов, где находятся 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 чтото не так
можно такое зделать?
спасибо за внимание
по 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, у вас оно точно работает?
у вас оно точно работает?»
тестовое окружение:
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
то оно както странно сохраняет. на консоле показывает директории (и никуда не исчезает),
но когда открываешь лог то оно показывает сначала одну название папки, потом две, потом три итд.
а как только доходит до последней папки сразу все сначала записывается лог, при этом на консоле ничего не пишется
проверте это просто скопировав эти три тестовые папки по нескольку раз пожалуйста
скопировав эти три тестовые папки по нескольку раз пожалуйста »куда скопировав?.. давайте полный (воспроизводимый) расклад:
структура папок, входные параметры, результат работы батника/лог
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
плюс одна строчка в конце »
эта строчка не из батника, а строка запуска этого батника
если нужно сразу из батника в файл, то можно так:
@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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.