Get bare file names recursively in command prompt
I ran into a little snag trying to get only the filenames (no extensions or file paths) recursively.This worked for me in the root folder:
dir /b
But when i added /s to scan recursively i also got file paths before filenames which i do not want. Is there a way to get bare filenames from all subfolders in a directory?
Im on Windows 7 x64 I'd rather use regular command prompt not PS or VBS
Use the following command:
dir /b /a /s
- /b strips the date and other details from the output
- /a only outputs the filename, no paths
- /s enables a recursive directory listing
If you need to save the output to a file, you can use:
dir /b /a /s >> list_of_names.txt
EDIT Actually the above solution doesn't reach the original question's goals. One thing I did notice from the question is that the post asks for recursive listing. which the other answer lacks so I think adding "/s" in the other answerer's answer will do the trick
for /f %a in ('dir /b /s') do @echo %~na
Try this:
for /f "delims=" %a in ('dir /b /s') do @echo %~na
More information on how for works and what it's doing, type for /?
for /r %i in (*) do @echo %~ni
or
forfiles /s /c "cmd /c if @isdir==FALSE noquotes.bat @fname"
assuming a file noquotes.bat
in your %PATH% with this content
@echo %~1
for /r approach explained
for /r
walks the current directory recursively (you can specify a directory for /r drive:\path\
, the current directory is assumed) and executes the command specified by do for each file matched in the set (*)
. The set (.)
would match only directories. @echo %~ni
This command works as-is from the prompt. Double up on your quotes if you put it inside a batch file. i.e. for /r %%i in (*) do @echo %%~ni
forfiles approach explained
/s
enumerates the current and all subdirectories/c
executes the command inside the quotes@isdir
and @fname
is a symbol emitted into the command string
The extra batch file noquotes.bat
helps by stripping the double-quotes with %~1 (parameter 1)forfiles
also allows you to specify a path to start at forfiles /P C:\Windows ...