Показать полную графическую версию : [решено] Подсчитать количество нужных файлов в папке
Alexander_88
18-11-2015, 08:59
Здравствуйте, подскажите, пожалуйста, как подсчитать количество нужных мне файлов в каждой папке. Решение нужно 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
Формализуйте Ваше:
не похожих на другие »
и приводите более вменяемый пример, когда в одном каталоге не будет сразу по несколько файлов с одинаковыми именами.
Alexander_88
18-11-2015, 09:54
Имена файлов исправил, теперь нету одинаковых. А на счет не похожих на другие написал вроде после слов "Как вычислить такие файлы?"
если подробнее:
Это все кроме тех файлов, имя которых я укажу.
я указываю имя, для каждой папки, оно начинается не с начала имени файла, а с пятого символа.
если указал имя "start"
то это все файлы с именем "????start" (на месте вопросов может быть что угодно).
Т.е. все эти файлы нужно исключить, а посчитать все остальные.
И как прикажете выяснять то самое кодовое слово по которому файлы "похожи" или "не похожи"? Если указывать для каждой папки такое слово вручную то есть варианты, если это нужно таинственным образом вычислить... Имхо это несколько малореально.
Для варианта указывания вручную:
@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
Спасибо, конечно я сам буду указывать для каждой папки, как и написал в 1ом посту.
При запуске бат, просто появляется
>=20
значит искомых файлов больше либо равно 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
а как вывести пути с именами папок? и если нельзя вывести количество, то вывести только те, где меньше 20 файлов нашлось.
пример:
F:\folder1
F:\folder3
У меня кстате всегда пишет >= 20, хотя по факту их меньше..
имя указал amb
в папке 20 файлов, таких: ????amb и еще 4 файла разных, т.е получается количество 4, а пишется, что больше 20
@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
вот код:
@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".
:(
Подкорректировал
@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
Сейчас показывает
>=20 (52) и ниже выводит список всех файлов, в которых лежит батник (хотя путь вообще другой)
Исправил еще раз (см. предыдущий пост).
Alexander_88
19-11-2015, 12:15
Спасибо, теперь количество файлов выводится правильно, и правильно определяется больше или меньше 20ти, только вот ниже зачем - то выводятся все имена этих файлов. Можно ли не выводить их? Просто в одной строке название папки, количество файлов и больше или меньше 20ти.
пример:
Folder1 <20 (5)
В идеале конечно лучше, чтобы ничего не выводилось, если количество файлов больше 20 (просто пустой экран).
Alexander_88
19-11-2015, 12:42
Сделал так
@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) отключен
echo тогда тоже нужно убрать. или сделать так:
echo >NUL
Alexander_88
19-11-2015, 12:58
Спасибо, все, теперь все как нужно работает :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.