명령 프롬프트에서 베어 파일 이름을 재귀 적으로 가져 오기 / s를 추가하면 원하지 않는 파일

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

dir /b

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

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



답변

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

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


답변

이 시도:

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

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


답변

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 ...


답변

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

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


답변