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


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.