Windows 명령 프롬프트 : 현재 디렉토리의 모든 파일 수를 얻는 방법?


24

cmd.exe현재 디렉토리에서 파일 수를 찾기 위해 어떤 명령을 사용 하시겠습니까?

여기에 파워 쉘 옵션이 있습니까?

업데이트 : dir현재 디렉토리에 10,000 개 이상의 파일이 있다는 것을 알고 있기 때문에 피하고 싶었습니다. cmd 창에 대한 열거 출력을 피하고 싶었습니다. 고맙습니다!

답변:


27

당신이 그것을하고 싶다면 cmd다음은 사소한 방법입니다.

set count=0 & for %x in (*) do @(set /a count+=1 >nul)
echo %count%

그것은 명령 줄을 가정합니다. 배치 파일에서

@echo off
setlocal enableextensions
set count=0
for %%x in (*) do set /a count+=1
echo %count%
endlocal

조금 더 좋은 일을합니다. 배치 파일에서 실행하면 결과가 표시되지 않으므로 명령 줄에서 직접 수행 >nul하므로 배치를 삭제할 수 있습니다 set /a. 또한 루프 의 %부호는 for두 배가되어야합니다.

사람들이 멋진 트릭을 시도하는 사례가 많이 find /c있습니다. 매우 다양한 물건이 손상 될 수 있습니다로, 그주의.

흔한 실수:

  1. 를 사용 find /c /v하여 파일 이름에 포함되지 않은 것을 찾으십시오 (예 :) ::. 습관. 작업. 확실하게. 콘솔 창이 래스터 글꼴로 설정되면 해당 문자 조합을 얻을 수 있습니다 . 나는 같은 파일 이름에 문자를 포함 할 수 있습니다 :, ?등 다음이 끊어집니다 정상적인 ASCII 대응으로 전환 얻을 것이다 예를 들어 자신의 전체 폭 변종이다. 정확한 카운트가 필요하면 시도하지 마십시오.

  2. 항상 파일 이름에 포함 된 find /c것을 사용 하고 찾아보십시오 . 분명히 점 ( )은 좋지 않은 선택입니다. 또 다른 대답은.

    dir /a-d | find /c ":"

    이것은 사용자의 로케일에 관한 몇 가지 사항을 가정하지만, 모든 것이 사실이라고 보장하는 것은 아니며 (문제에 대해 상세하게 의견을 남겼습니다) 하나의 결과를 너무 많이 반환합니다.

일반적으로, 당신이 사용하려는 finddir /b상처가 멀리 아닌 모든 파일 이름 물건과 피합니다 그런 식으로 오류를 fencepost있다.

따라서 우아한 변형은 다음과 같습니다.

dir /b /a-d | find /c /v ""

먼저 모든 파일 이름을 한 줄씩 출력합니다. 그런 다음 비어 있지 않은 해당 출력의 모든 줄을 계산하십시오. 파일 이름은 비워 둘 수 없기 때문에 (내가 뭔가를 누락시키지 않으면 유니 코드는 테스트에 따라 이것을 트립하지 않습니다).


1
+1 정확히 내가 찾던 것입니다. JR 감사합니다!
p.campbell 2019

첫 번째 버전을 모두 한 줄로 만들기 위해 약간의 조정 : (set count = 0 & (*)에서 % x의 경우 @ (set / a count + = 1> nul) 수행) && echo % count %
Jason Massey

–1dir /b /a-d | find /c /v ""
Arvo Bowen

이 솔루션은 수백만 개의 파일이있을 때 제대로 작동하지 않습니다. "영원히"실행됩니다. PS와 [System.IO.Directory] :: GetFiles ($ path)를 사용하여 "초 단위"로 실행되는 더 나은 솔루션이 아래에 게시되어 있습니다.
ripvlan

@ Jason, %count%구문 분석 시간에 확장 된 이후 아마도 실패 할 것입니다 .
Joey

17

다음과 같은 질문을 받으십시오. http://technet.microsoft.com/en-us/library/ee692796.aspx

폴더의 항목 수 계산

글쎄, 당신이 아는 것 : 태양이 드디어 나오는 것처럼 보이므로 우리가 갈 시간이 거의 다되었습니다. 그러나 시작하기 전에 Get-ChildItem cmdlet을 사용한 마지막 요령을 보여 드리겠습니다. 때로는 폴더의 파일에 대해 많이 알 필요가 없습니다. 실제로 알아야 할 것은 특정 폴더에서 찾을 수있는 파일 수 (있는 경우)입니다. 폴더의 파일 수를 빠르게 계산하는 방법은 다음과 같습니다.

(Get-ChildItem C:\Scripts).Count

우리 여기서 뭐 해요? 우리는 단순히 Get-ChildItem을 사용하여 C : \ Scripts 폴더에있는 모든 항목의 컬렉션을 반환합니다. 컬렉션이기 때문에 Count 속성의 값을 에코하여 컬렉션의 항목 수를 알려줍니다. 괄호 사용에 유의하십시오. Windows PowerShell이 ​​먼저 컬렉션을 가져 와서 해당 컬렉션의 Count 속성 값만 에코하도록하기 위해 Get-ChildItem 명령을 괄호로 묶습니다.

그리고 Get-ChildItem을 호출 할 때 필터를 포함 할 수 있습니다. C : \ Scripts 폴더에 몇 개의 .PS1 파일이 있는지 알아야합니까? 좋아요-도크 :

(Get-ChildItem C:\Scripts -filter "*.ps1").Count

참고로 .. "powershell count files"를 봤습니다.


1
두 번째 예에 따라 실제로 개수를 계산하여 파일을 계산하려면 filespec을 추가해야합니다.
Jim B

3
(Get-ChildItem C : \ Scripts) .Count는 폴더의 파일 수를 반환하지 않으며 폴더의 OBJECTS 수를 반환합니다. 파일을 계산하려면 필터 또는 파일 사양을 추가해야합니다. C : 드라이브의 루트에서 (gci) .count와 dir을 시도하고 숫자의 차이를보십시오
Jim B

4
동일한 링크에서 하위 폴더에있는 파일도 계산하려면 다음을 사용하십시오.(Get-ChildItem -recurse -filter "*.ps1").Count
jrsconfitto

1
정확히 하나의 파일이있는 경우 작동하지 않습니다. $ filecount = @ (get-childitem $ directory -filter " . ") .Count. 다른 곳에서 읽은 내용에서 파일이 하나 있으면 배열이 아닙니다.
NealWalters

@NealWalters : PowerShell v3까지는 정확했습니다. 그 이후로는 중요하지 않습니다.
Joey

8
dir /a-d | find "File(s)"

이와 같은 간단한 파일 작업에 PowerShell을 사용하는 것에 대한 경고는 특히 네트워크 연결이나 디렉토리에 수천 개의 파일이있는 경우 cmd.exe와 비교할 때 속도가 매우 느립니다. 자세한 내용은 이 포럼 게시물 을 참조하십시오.


시스템이 영어가 아닌 다른 언어로되어 있다면 이것에 문제가있을 것입니다.
WalyKu

7

dir 하단에 총 파일 수를 제공합니다.


1
1 Up mate, 당신은 이걸로 이겼습니다 :)
dyasny

2
모든 줄이 cmd 창을 스크롤하는 것을 보는 비용을 피하기 위해 최소화하십시오. 많이 빨리 작동합니다.
gbjbaanb

1
아니면 그냥 dir > file.. 내가 미스 POSIX 아
lorenzog

1
@lorenz : dir > fileWindows에서 작동하지 않는 이유 는 무엇입니까? 출력 리디렉션은 마법이 아닙니다.
Joey

1
@ Johannes : 실제로 작동합니다! POSIX를 놓치면 dir | grep (something)화면상의 쓰기 속도가 느려지고 모든 것이 느려지는 것을 피할 수 있습니다.
lorenzog

7

내가 찾은 가장 빠른 방법은 PS 콘솔에서 다음을 실행하는 것입니다.

[System.IO.Directory]::GetFiles($path).Count

여기서 $ path는 로컬 경로 또는 UNC 공유입니다.


2
저것 봐. 이 질문을받은 지 7.5 년이 지난 후에도 굉장한 훌륭한 답변이 나왔습니다!
p.campbell

210 만 개가 넘는 파일이있는 디렉토리의 가상 서버에서 약 10 초 후에 카운트를 반환했습니다. 이것이 정답이어야합니다.
DarrenMB 2016 년

이것이 가장 좋은 대답입니다. 나는 450 만 개의 파일이 들어있는 폴더를 가지고 있었고이 방법은 몇 초 안에 파일을 계산했습니다. 다른 제안 된 답변의 방법은 내가 포기하기 전에 몇 분 동안 실행되었습니다.
ripvlan

3

dir / B 출력 (디렉토리 포함)에서 행을 계산하십시오.
dir /B | find /c /v "~~~"

파일을 세지 않고 (더러워지지 않음) :
dir /A-D /B | find /c /v "~~~"


이것은 파일과 디렉토리 수를 총계로 반환합니다
TheCleaner

2

인터넷에서 이것을 찾았 습니다.

dir /a-d | find /c ":" > NUMfiles.###
set /p count=<NUMfiles.###
echo %count%

나는 테스트했고 작동하는 것 같습니다.


여기에 "보인다"는 정확한 단어입니다. (1) dir명령은 파일 이 아닌 콜론이있는 줄을 포함하기 때문에 어떤 경우에도 하나씩 해제됩니다 . (2) 콜론을 포함하기 위해 시간 형식에 의존하므로 반드시 그럴 필요는 없습니다. (3) 콜론을 포함 하지 않는 숫자 형식에 의존하며 반드시 콜론을 포함 할 필요는 없습니다. 또한 여기에서 파일을 처리하는 것은 불필요하며 쓰기 액세스 권한이없는 경우 작동하지 않습니다.
Joey

"NUMfiles. ###"파일을 만들지 않고 만드는 방법?
NickUnuchek 2016 년

2

위의 Trevoke 's PowerShell 응답을 사용하는 사람들을위한주의 사항 ( Windows 명령 프롬프트 : 현재 디렉토리의 모든 파일 수를 얻는 방법은 무엇입니까? ) : 의도적으로 Get-ChildItem에서 반환하는 컬렉션의 Count 속성을 에코하면 잘못된 결과를 줄 수 있습니다 Count 속성이 배열에서만 사용할 수 있기 때문입니다. Get-ChildItem에서 2 개 미만의 항목을 반환하면 결과는 스칼라이며 .Count는 아무것도 반환하지 않습니다. 이 문제를 해결하려면 @ (Get-ChildItem C : \ Scripts) .Count와 같이 명시 적으로 배열로 캐스트하십시오.

자세한 내용은 http://connect.microsoft.com/PowerShell/feedback/details/354672/get-childitem-count-problem-with-one-file 또는 http://www.vistax64.com/powershell/266379를 참조 하십시오 . -get-childitem-count-not-working-one-file.html .



0

물론 일할 것입니다

서버에 무언가를 설치하지 않고 워크 스테이션에 powershell을 설치하지 않으면 다음을 수행 할 수 있습니다.

(gwmi -computer theserver -query "select *from cim_datafile where path = '\\'").count

이 명령은 모든 파일 (시스템 및 숨겨진 파일 포함)을 제공하며 powershell이 ​​컴퓨터에있는 경우 앞에서 언급했듯이 간단하게 수행 할 수 있습니다

(GCI c:\*.*).count

를 포함하지 않으면 . 모든 파일과 모든 디렉토리의 수를 얻게됩니다. 숨겨진 파일과 시스템 파일은 모두 포함하기 위해 -force를 추가해야합니다.


0

한 번만 이것을 사용하면 dir을 사용하고 싶습니다. 그렇지 않으면 C # 응용 프로그램으로 내 롤링을 고려할 것입니다 .VBScript 또는 PowerShell도 실행 가능하지만 가장 친숙하기 때문입니다.

(그런데-cmd.exe를 사용하는 경우 DOS가 아닙니다)


0

attrib을 사용하여 파일 수를 얻을 수 있다고 생각합니다.

attrib.exe /s /D *.*|find /c /v "" >> filecount.txt

이렇게하면 현재 디렉토리에 filecount.txt라는 파일이 생성되고 현재 디렉토리에있는 파일 및 폴더 수 (새로 작성된 파일 포함)가 생성됩니다. 당신은 변경할 수 있습니다

*.*

<full_path>\*.*

특정 디렉토리의 파일 수를 얻기 위해. 폴더를 계산하지 않으려면 "/ D"옵션을 제거하십시오. "/ s"옵션은 지정된 경로의 모든 디렉토리에있는 파일을 처리합니다. 따라서 지정된 경로에 파일 만 있고 하위 폴더에 파일을 포함하지 않으려면 제거하십시오.

예를 들어 C : \ 드라이브에 몇 개의 파일이 있고 하위 폴더가 아닌 파일을 찾으려면 다음 명령을 사용하십시오.

attrib.exe C:\*.* | find /c /v "" >> filecount.txt

결과를 위해 파일을 사용하는 것이 가장 현명한 아이디어는 아닙니다. 현재 디렉토리에 쓸 수없는 경우 어떻게합니까?
Joey

@Johannes 쓰기 권한이있는 디렉토리를 사용합니까? 예를 들어 파이프로 출력 C : \ MyWritableDir \ filecount.txt
스모크

여전히 불필요합니다.
Joey

-2

나는 비슷한 것을하고 있으며 이것은 많은 파일에서 즉시 작동합니다.

Setlocal enabledelayedexpansion

Dir /A | find "File(s)" >tmp

For /F "tokens=1" %%i in (tmp) do set n=%%i

Del tmp

If !n! GEQ 10 echo Too many files in directory.

벌써 많은 (좋은) 답변이있는 6 살짜리 질문에 쓸모없고 결함이있는 답변을 게시하는 이유는 무엇입니까?
Massimo

@Massimo 위의 답변에 만족하지 않고보다 우아한 솔루션을 원했기 때문에 @Massimo. 시간에 의해 제한되지 않는 지식을 추구하는 데 방해가되는 이유는 무엇입니까?
Aaron Lowe

어! 답글이 끔찍해 보입니다. 답변에 대한 솔루션 수정. 나에게 감사 할 필요는 없다. 나는 다른 사람들을 돕는 부정적인 담당자를 좋아한다. -P
Aaron Lowe

실제로 출력 파일을 사용하여 일부 출력을 유지할 이유가 없습니다. 또한 사용 find하는 것은 좋은 생각이 아닙니다. 자세한 내용은 허용 된 답변을 참조하십시오.
Massimo

@Massimo 귀하의 질문에 답변했습니다. 당신은 나에게 대답해야합니다. 임시 파일을 사용하지 않는 방법을 보여 주시면 감사하겠습니다. 나는 이미 모든 답변을 읽었으므로 내가 직접 게시 한 이유입니다. 답변이 승인되었으므로 새로운 답변을 찾을 수 없다고 가정합니다. OP뿐 아니라 동일한 솔루션을 찾는 모든 사람을위한 것입니다.
Aaron Lowe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.