comando de directorio de línea de comando de Windows: para mostrar solo el nombre del archivo, en formato 8.3?

11

Sé que "dir / w" o "dir / b" muestra solo el nombre del archivo. Mientras que "dir / x" o "dir / X" muestra el formato 8.3, pero juntos muestra toda la otra información, como nombres de archivos de formato largo, fechas y tamaño.

¿es posible llamar dir, que solo muestra los nombres de los archivos (que no muestran fechas o tamaños) y que los muestra en formato 8.3?

athos
fuente

Respuestas:

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

sin subdirectorio:

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

agregar archivos ocultos:

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

sin subdirectorio:

for /F "tokens=*" %A in ('dir /B/A:- *') do @echo %~nsA %~nA
STTR
fuente
¿Puede incluir una salida que demuestre que lo hace
Barlop
¿Cómo lo haría para patear los resultados de ese primer comando en un archivo de texto? Aparece el siguiente error: "La operación solicitada no se puede realizar en un archivo con una sección asignada por el usuario abierta".
bdb484
3

Si solo desea que se muestren los nombres 8.3 y nada más, si usa "dir / -n" obtendrá el nombre 8.3 al comienzo de cada línea. Nota: separa la extensión del nombre del archivo con un espacio en lugar de un punto.

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

Pero puede usar el "dir / -n" dentro de un bucle for en un archivo por lotes y luego extraer una subcadena de los primeros 12 caracteres para deshacerse del resto de cada línea. P.ej:

@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!
)

El "skip = 7" omite las primeras 7 líneas, que no son nombres de archivo ni de directorio, y la salida del "dir / -n" se canaliza a través de dos comandos find para eliminar las dos últimas líneas producidas por "dir / -n "(el símbolo de tubería" | "debe" escaparse "mediante un" ^ ". Dado que la extracción de la subcadena se produce en un bucle for en el archivo por lotes, se necesita" setlocal EnableDelayedExpansion "y"! "debe usarse con el variable x en lugar de "%". Para el ejemplo anterior, verá el siguiente resultado al ejecutar el archivo por lotes:

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
punto de luna
fuente
Nitpick: uno o más espacios. Intenta crear un archivo llamado abc.txtpara ver esto en acción. Luego, por diversión, cree un archivo llamado abc.docx.
un CVn
0

Después de jugar con esto durante una hora, se me ocurrió lo siguiente:

de dos prompt:

for /F "tokens=*" %A in ('dir /B/A:-/S c:\Windows') do (@echo %~sA>> "%temp%\file_list_8dot3.txt")

del archivo .BAT o .CMD:

for /F "tokens=*" %%A in ('dir /B/A:-/S c:\Windows') do (@echo %%~sA>> "%temp%\file_list_8dot3.txt")

nota: este script todavía tiene problemas con los nombres de archivo largos, pero continuará y creará un archivo de texto 8dot3 que luego se puede bombear a cualquier otro archivo por lotes.

El siguiente es mi archivo completo de prueba .Bat:

@echo off
cls

set ll=%temp%\file_list_8dot3.txt

if exist "%ll%" del "%ll%"
for /F "tokens=*" %%A in ('dir /B/A:-/S %temp%') do (@echo %%~sA>> "%ll%")

start /wait notepad "%ll%"

if exist "%ll%" del "%ll%"
Chicago Galloway
fuente
0

Para listar archivos en todos los subdirectorios, pruebe este:

for /d /r %i in (*.*) do dir "%i" /B > %i/test.txt

 

ramu
fuente