Количество файлов в каталоге - PullRequest
0 голосов
/ 28 сентября 2010

Я пытаюсь найти только в одной строке количество файлов (* .rar) в каталоге.

Для этого я использую команды:

for /f "delims=" %i in ('find /c ".rar" "D:\backup e ckpdb ept-icd\test\unload\lista_files_rar.txt"') do echo %i

но значение% i, которое у меня есть в конце: D: \ BACKUP E CKPDB EPT-ICD \ TEST \ UNLOAD \ LISTA_FILES_RAR.TXT: 8

Я хотел бы получить только число 8, поэтому вместо вывода значения я бы присвоил значение переменной.

Я использую командную строку: dir / b * .rar | найти / с ".rar" что он возвращает значение rar-файлов в каталоге, но я не могу присвоить значение переменной, например: dir / b * .rar | найти / с ".rar" | set / a files =

Я также пытался использовать ключевое слово tokens = 2, но оно не работает

p.s Если это можно сделать только с помощью команды find, то лучше

Ответы [ 5 ]

1 голос
/ 29 сентября 2010

См. здесь , например, о подсчете файлов

Или вы можете просто сделать что-то вроде этого (не проверено)

for /F %%j in ('dir /B *.rar ^| find /C /V ""') do set count=%%j
0 голосов
/ 29 сентября 2010
for /f %a in ('dir "*.txt" ^| find "File(s)"') do set Count=%a

дает

set Count=36

или вы можете использовать арифметический набор и задержку расширения переменной среды

set count=0
for %a in (*.txt) do @set /a Count=!Count!+ 1 > nul
echo %count%

дает

Count=36
0 голосов
/ 29 сентября 2010

Спасибо, думаю, буду использовать

для / F %% j in ('dir / B * .rar ^ | find / C / V ""') установить число = %% j

user135127

Таким образом, я думаю также, что если что-то придумать во имя dir, результат должен всегда оставаться неизменным.

разница между:

dir / B * .rar ^ | найти / C / V "" и

dir / B * .rar ^ | найти / C ".rar"?

0 голосов
/ 28 сентября 2010

Попробуйте "delims =: tokens = 3"

Обычно в результате вы получите два двоеточия: одно после буквы диска и одно перед желаемым числом, поэтому ваш номер должен быть токеном 3

0 голосов
/ 28 сентября 2010

Это возвращает только число; может быть, есть более чистый способ сделать это, но, к сожалению, «find» не может принять его входные данные из канала (т.е. я не могу сделать dir | find):

@echo off
dir /b *.rar> out.tmp
for /f "usebackq tokens=3" %%i in (`find /c "rar" out.tmp`) do echo %%i
del out.tmp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...