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?

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

¿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

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%"

0

Para listar archivos en todos los subdirectorios, pruebe este:

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

 

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.