windows command line dir command: to display only the file name, in 8.3 format?

I know that "dir /w" or "dir /b" shows only the file name. While "dir /x" or "dir /X" shows the 8.3 format, but together shows all other information like long format file names, dates and size.

is it possible to call dir, that only shows the file names (not showing dates or sizes), and showing that in 8.3 format?


Solution 1:

for /R %A in (*.*) do @echo %~nsA %~nA

without subdirectory:

for %A in (*.*) do @echo %~nsA %~nA

add hidden files:

for /F "tokens=*" %A in ('dir /B/A:-/S *') do @echo %~nsA %~nA

without subdirectory:

for /F "tokens=*" %A in ('dir /B/A:- *') do @echo %~nsA %~nA

Solution 2:

If you just want the 8.3 names and nothing else to be displayed, if you use "dir /-n" you will get the 8.3 name at the beginning of each line. Note: it separates the extension from the filename with a space rather than a period.

C:\Users\User>dir /-n
 Volume in drive C has no label.
 Volume Serial Number is 5C60-1B61

 Directory of C:\Users\User

.             <DIR>             01/28/2015  11:26 PM
..            <DIR>             01/28/2015  11:26 PM
Contacts      <DIR>             12/27/2014  04:46 PM
Desktop       <DIR>             01/25/2015  05:06 PM
DOCUME~1      <DIR>             01/27/2015  10:20 PM
DOWNLO~1      <DIR>             01/27/2015  10:10 PM
FAVORI~1      <DIR>             12/27/2014  04:46 PM
GOOGLE~1      <DIR>             01/28/2015  02:08 AM
Links         <DIR>             01/25/2015  05:06 PM
Music         <DIR>             12/27/2014  04:46 PM
Pictures      <DIR>             12/27/2014  04:46 PM
SAVEDG~1      <DIR>             12/27/2014  04:46 PM
Searches      <DIR>             12/27/2014  04:46 PM
TESTIN~1 TXT                  8 01/28/2015  10:32 PM
TESTIN~2 BAT                175 01/28/2015  11:26 PM
TESTIN~1 BAT                164 01/28/2015  11:26 PM
UNIGIN~1      <DIR>             10/28/2014  07:01 PM
Videos        <DIR>             12/27/2014  04:46 PM
               3 File(s)            347 bytes
              16 Dir(s)  3,896,034,717,696 bytes free

But you can use the "dir /-n" within a for loop in a batch file then extract a substring of the first 12 characters to get rid of the rest of each line. E.g.:

@echo off
setlocal EnableDelayedExpansion

for /f "skip=7 tokens=*" %%i in ('dir /-n ^| find /v "File(s)" ^| find /v "Dir(s)"') do (
   set x=%%i
   echo !x:~0,12!
)

The "skip=7" skips the first 7 lines, which aren't file nor directory names and the output of the "dir /-n" is piped through two find commands to remove the last two lines produced by "dir /-n" (the pipe symbol "|" needs to be "escaped" by a "^". Since the substring extraction occurs in a for loop in the batch file, "setlocal EnableDelayedExpansion" is needed and "!" needs to be used with the variable x rather than "%". For the above example, you would then see the following output from executing the batch file:

C:\Users\User>testing456
Contacts
Desktop
DOCUME~1
DOWNLO~1
FAVORI~1
GOOGLE~1
Links
Music
Pictures
SAVEDG~1
Searches
TESTIN~1 TXT
TESTIN~2 BAT
TESTIN~1 BAT
UNIGIN~1
Videos