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

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

Alexander_88 18-11-2015 08:59 2576027

Подсчитать количество нужных файлов в папке
 
Здравствуйте, подскажите, пожалуйста, как подсчитать количество нужных мне файлов в каждой папке. Решение нужно PowerShell или BAT.

есть папки:

"F:\folder1"
"F:\folder2"
"F:\folder3"

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

Как вычислить такие файлы?....

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

Пример:
список файлов:

папка "F:\folder1"

Код:

0001start
0014
15dfgfdgdf
dfgdfg45dfgdfg45
asdfs
asdfsdf
sffdgdfg
gfh
gfhfgh
dsafsdf
0154start
dfgdfgfd
jukuk
fghdh
ykykyu
5dfgdfg44
dhfghfg
hgjghjhg
dsfgdfg
ghjghjh
fsdgdfhgfg
jkyk
sdfsgtrehrtht
fgfghfgh
wssdf
0546start
0846start

папка "F:\folder2"

Код:

0054terminator
dfgdfgdfgfd
dfggfhgfh
0546terminator
1542terminator
fghfghfgh
1846terminator

папка "F:\folder3"

Код:

0054Windows
kkll
0025
0546Windows
1542Windows
tdfgfg
gfhfghfg
fghhg
1846Windows

для папки "F:\folder1" мы указываем имя start
для папки "F:\folder2" мы указываем имя terminator
для папки "F:\folder3" мы указываем имя Windows

Результат выполнения скрипта такой:

Код:

Количество файлов:
F:\folder1 - 23
F:\folder2 - 3
F:\folder3 - 5

Меньше 20 файлов:
F:\folder2 - 3
F:\folder3 - 5


Iska 18-11-2015 09:13 2576033

Формализуйте Ваше:
Цитата:

Цитата Alexander_88
не похожих на другие »

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

Alexander_88 18-11-2015 09:54 2576048

Имена файлов исправил, теперь нету одинаковых. А на счет не похожих на другие написал вроде после слов "Как вычислить такие файлы?"
если подробнее:
Это все кроме тех файлов, имя которых я укажу.

я указываю имя, для каждой папки, оно начинается не с начала имени файла, а с пятого символа.
если указал имя "start"
то это все файлы с именем "????start" (на месте вопросов может быть что угодно).
Т.е. все эти файлы нужно исключить, а посчитать все остальные.

Elven 18-11-2015 12:10 2576107

И как прикажете выяснять то самое кодовое слово по которому файлы "похожи" или "не похожи"? Если указывать для каждой папки такое слово вручную то есть варианты, если это нужно таинственным образом вычислить... Имхо это несколько малореально.
Для варианта указывания вручную:

Код:

@echo off
for /f %%i in ('dir /b /a:-d "указываемая_папка" ^| find /v /c /i "указываемое_имя"') do if %%i geq 20 (echo ^>= 20) else (echo ^<20)

Разумеется можно считывать пары "папка - отличительное_имя" из файла, например, или вводить по мере нужности с клавиатуры, но это уже мелкие доработки.

Alexander_88 18-11-2015 12:35 2576117

Спасибо, конечно я сам буду указывать для каждой папки, как и написал в 1ом посту.
При запуске бат, просто появляется
Код:

>=20

Elven 18-11-2015 13:06 2576131

значит искомых файлов больше либо равно 20
вот здесь вот как бы спрашивается сколько "найденных файлов больше либо равно 20"?
Код:

if %%i geq 20
если "да" то
Код:

(echo ^>= 20)
вывести на экран сообщение ">=20"
иначе
Код:

else (echo ^<20)
вывести на экран сообщение "<20"

вместо этого (или вместес этим) можно выводить что-нибудь другое, например так:
Код:

@echo off
for /f %%i in ('dir /b /a:-d "указываемая_папка" ^| find /v /c /i "указываемое_имя"') do if %%i geq 20 (echo ^>= 20 ^(%%i^)) else (echo ^<20 ^(%%i^))


Alexander_88 18-11-2015 13:55 2576145

а как вывести пути с именами папок? и если нельзя вывести количество, то вывести только те, где меньше 20 файлов нашлось.

Код:

пример:
F:\folder1
F:\folder3

У меня кстате всегда пишет >= 20, хотя по факту их меньше..

имя указал amb
в папке 20 файлов, таких: ????amb и еще 4 файла разных, т.е получается количество 4, а пишется, что больше 20

Elven 18-11-2015 15:22 2576170

Код:

@echo off
set name="указываемое_имя"
popd "указываемая_папка"
for /f %%i in ('dir /b /a:-d ^| find /v /c /i %name%') do if %%i geq 20 (
echo ^>= 20 ^(%%i^)
dir /b /a:-d ^| find /v /i %name%
) else (
echo ^<20 ^(%%i^)
dir /b /a:-d ^| find /v /i %name%
)


Alexander_88 18-11-2015 18:38 2576216

вот код:

Код:

@echo off
set name="amb"
popd "F:\folder1"
for /f %%i in ('dir /b /a:-d ^| find /v /c /i %name%') do if %%i geq 20 (
echo ^>= 20 ^(%%i^)
dir /b /a:-d ^| find /v /i %name%
) else (
echo ^<20 ^(%%i^)
dir /b /a:-d ^| find /v /i %name%
)

список файлов в папке:
Код:

0381amb.flv
0382amb.flv
0383amb.flv
0384amb.flv
0385amb.flv
0386amb.flv
0387amb.flv
0388amb.flv
0389amb.flv
0390amb.flv
0391amb.flv
0392amb.flv
0393amb.flv
0394amb.flv
0395amb.flv
0396amb.flv
0397amb.flv
0398amb.flv
0399amb.flv
0400amb.flv
0401amb.flv
0402amb.flv
0403amb.flv
0404amb.flv
0405amb.flv
0406amb.flv
0407amb.flv
0408amb.flv
0409amb.flv
0410amb.flv
0411amb.flv
0412amb.flv
0413amb.flv
0414amb.flv
0415amb.flv
0416amb.flv
0417amb.flv
0418amb.flv
0419amb.flv
0420amb.flv
hgjghjghjgh.flv
video_29011.flv
video_29257.flv
video_32580.flv
video_32653.flv

получается должно найтись только 5 файлов (я в имени указал amb).
т.е. эта папка должна вывестись, т.к. файлов меньше 20.

результат должен быть:

Код:

F:\folder1 - 5
А у меня результат:
Код:

>=20 (52)
недопустимый ключ "v".

:(

Elven 18-11-2015 19:28 2576232

Подкорректировал
Код:

@echo off
set name="amb"
pushd "F:\folder1"
for /f %%i in ('dir /b /a:-d ^| find /v /c /i %name%') do if %%i geq 20 (
echo ^>= 20 ^(%%i^)
dir /b /a:-d | find /v /i %name%
) else (
echo ^<20 ^(%%i^)
dir /b /a:-d | find /v %name%
)
popd


Alexander_88 19-11-2015 05:13 2576354

Сейчас показывает
>=20 (52) и ниже выводит список всех файлов, в которых лежит батник (хотя путь вообще другой)

Elven 19-11-2015 12:01 2576428

Исправил еще раз (см. предыдущий пост).

Alexander_88 19-11-2015 12:15 2576435

Спасибо, теперь количество файлов выводится правильно, и правильно определяется больше или меньше 20ти, только вот ниже зачем - то выводятся все имена этих файлов. Можно ли не выводить их? Просто в одной строке название папки, количество файлов и больше или меньше 20ти.
пример:
Код:

Folder1 <20 (5)
В идеале конечно лучше, чтобы ничего не выводилось, если количество файлов больше 20 (просто пустой экран).

Alexander_88 19-11-2015 12:42 2576453

Сделал так

Код:

@echo off
set name="amb"
pushd "F:\Folder1"
for /f %%i in ('dir /b /a:-d ^| find /v /c /i %name%') do if %%i geq 20 (
echo
) else (
echo Folder1 = (%%i^)
)
popd

думал ничего не будет писать при больше 20ти, а он пишет "режим вывода команд на экран (ECHO) отключен

Elven 19-11-2015 12:50 2576455

echo тогда тоже нужно убрать. или сделать так:
Код:

echo >NUL

Alexander_88 19-11-2015 12:58 2576458

Спасибо, все, теперь все как нужно работает :)


Время: 09:45.

Время: 09:45.
© OSzone.net 2001-