Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] список каталогов, где находятся 2 и более файлов (http://forum.oszone.net/showthread.php?t=168674)

neprotiv 27-02-2010 09:41 1357132

список каталогов, где находятся 2 и более файлов
 
суть в чем. есть много каталогов, где находятся файлы *.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 1357168

Цитата:

Цитата neprotiv
по 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 1357181

чтото не то....не работает...не выдает ошибку, не создает список
amel27, у вас оно точно работает?

amel27 27-02-2010 11:05 1357190

Цитата:

Цитата neprotiv
у вас оно точно работает?»

тестовое окружение:
Код:

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 1357222

хм..странно но заработало...большое вам спасибо за помощь

neprotiv 27-02-2010 13:09 1357300

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

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

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

amel27 27-02-2010 15:33 1357433

Цитата:

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

куда скопировав?.. давайте полный (воспроизводимый) расклад:
структура папок, входные параметры, результат работы батника/лог

neprotiv 28-02-2010 04:05 1357845

при запуске сот строкой - 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 1357941

Цитата:

Цитата neprotiv
плюс одна строчка в конце »

эта строчка не из батника, а строка запуска этого батника
если нужно сразу из батника в файл, то можно так:
Код:

@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 1358480

amel27, большое вам спасибо. теперь работает как часы
спасибо


Время: 01:14.

Время: 01:14.
© OSzone.net 2001-