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