명령 프롬프트에서 베어 파일 이름을 재귀 적으로 가져 오기


19

나는 파일 이름 (확장자 또는 파일 경로 없음) 만 재귀 적으로 얻으려고 약간 걸림돌에 부딪 쳤습니다. 이것은 루트 폴더에서 나를 위해 일했습니다.

dir /b

그러나 재귀 적으로 스캔하기 위해 / s를 추가하면 원하지 않는 파일 이름 앞에 파일 경로가 있습니다. 디렉토리의 모든 하위 폴더에서 베어 파일 이름을 얻는 방법이 있습니까?

Windows 7 x64의 경우 PS 또는 VBS가 아닌 일반 명령 프롬프트를 사용하고 싶습니다.

답변:


15

다음 명령을 사용하십시오.

dir /b /a /s
  • / b 는 출력에서 ​​날짜 및 기타 세부 사항을 제거합니다.
  • / a는 경로없이 파일 이름 만 출력합니다.
  • / s 는 재귀 디렉토리 목록을 활성화합니다

출력을 파일로 저장해야하는 경우 다음을 사용할 수 있습니다.

dir /b /a /s >> list_of_names.txt

편집 실제로 위의 솔루션은 원래 질문의 목표에 도달하지 못합니다. 질문에서 내가 알았던 한 가지는 게시물이 재귀 목록을 요구한다는 것입니다. 다른 답변이 부족하므로 다른 답변자의 답변에 "/ s"를 추가하면 트릭을 수행 할 것이라고 생각합니다.

for /f %a in ('dir /b /s') do @echo %~na

이것을 설명해 주시겠습니까? 나에게는 거의 이해가되지 않습니다.
Simon Sheehan

4
이것은 작동하지 않으며 / a는 작동하지 않습니다. 나열하려는 파일 형식에 대한 필터입니다. 재귀 디렉토리 목록을 수행 할 때 파일 이름에서 경로를 제거하지 않습니다.
강력 접착

답을 편집했다. 방금 창문 상자에 손을 대면 이번에는해야한다고 생각합니다 (win732bit)
Nik So

6

이 시도:

for /f "delims=" %a in ('dir /b /s') do @echo %~na

작동 방식 및 작동 방식에 대한 자세한 정보 for /?


거의 작동하지만 큰 문제가 있습니다. 파일 이름의 첫 단어 만 출력합니다. 파일 이름이 "my vacation image 1"인 경우 "my"만 출력합니다
TMRW

이것을 시도하십시오 : for / f "delims = |" ( 'dir / b')의 % a는 @echo % ~ na를 수행합니다. 기본적으로 FOR의 / f 매개 변수는 공백에서 토큰 화합니다. 파일 / 디렉토리 이름에 나타나지 않아야하는 문자로 토큰을 설정하면 공백을 포함한 전체 이름이 제공됩니다.
Scott McKinney

출력을 파일로 보내려면>> filename.txt
Gruber

2
for /r %i in (*) do @echo %~ni

또는

forfiles /s /c "cmd /c if @isdir==FALSE noquotes.bat @fname"

이 내용으로 % PATH %에 파일 noquotes.bat을 가정

@echo %~1

/ r 접근 방법 설명

for /r현재 디렉토리를 재귀 적으로 탐색하고 (디렉토리를 지정할 수 for /r drive:\path\있으며, 현재 디렉토리가 가정 됨) set에서 일치하는 각 파일에 대해 do로 지정된 명령을 실행합니다 (*). 세트 (.)는 디렉토리 만 일치합니다. @echo % ~ ni이 명령은 프롬프트에서 그대로 작동합니다. 배치 파일에 넣으면 따옴표를 두 배로하십시오. 즉for /r %%i in (*) do @echo %%~ni

forfiles 접근 방식 설명

/s현재 열거하고 모든 하위 디렉토리는
/c따옴표 안에 명령을 실행
@isdir하고 @fname명령 문자열로 방출을 상징하는
여분의 배치 파일 noquotes.bat% ~ 1 (파라미터 1)와 이중 따옴표를 제거함으로써 도움이
forfiles또한 당신이에서 시작하는 경로를 지정할 수 있습니다을forfiles /P C:\Windows ...


@DavidPostill 예, 대답이 좋지 않았습니다. 귀하의 의견에 감사드립니다. 답변을 더 향상시킬 수 있는지 알려주십시오.
JJS

@DavidPostill 이전 답변이나 의견이 없습니다. 질문을 조정했거나 답변을 찾고 저품질 응답을 우연히 발견 했습니까?
JJS

귀하의 답변이 "저품질 게시물"검토 대기열에 나타납니다. 배치 파일에 대해 많이 알고 있으므로 자세히 살펴 보았습니다.
DavidPostill

@DavidPostill 검토해 주셔서 감사합니다. 답변에 대한 변경 사항을 검토해 주셔서 감사합니다.
JJS

훨씬 더 나은 ... :)
DavidPostill

-1

디렉토리가 아닌 속성을 사용하여 모든 파일을 반복적으로 나열합니다 (파일 만 해당).

dir / B / S / A : -D

C : \ test \ cache> dir / B / S / A : -D

C : \ test \ cache \ 7 \ 0f \ 7b50ed0522645513da90345120eaf0f7 C : \ test \ cache \ d \ 23 \ 814644aa6a8195c91e54d2f7bb64e23d


문제는 OP가“파일 이름 만 가져 오려고합니다 (확장자 또는 파일 경로 없음). … 그러나 dir /b /s재귀 적으로 스캔 하려고 시도 할 때 파일 이름 앞에 파일 경로가 생겼으므로 원하지 않습니다.”따라서 OP에 이미 시도한 내용에 대한 사소한 변형을 시도하도록 OP에 지시하고 있습니다. 그것은 OP가 그것을 시도했을 때와 같은 결과를 만들어 낸다 (즉, 그들이 원하는 것이 아님).
Scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.