comando dir riga di comando windows: per visualizzare solo il nome del file, in formato 8.3?


11

So che "dir / w" o "dir / b" mostra solo il nome del file. Mentre "dir / x" o "dir / X" mostra il formato 8.3, ma insieme mostra tutte le altre informazioni come nomi di file di formato lungo, date e dimensioni.

è possibile chiamare dir, che mostra solo i nomi dei file (senza mostrare date o dimensioni) e mostrarli in formato 8.3?

Risposte:


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

senza sottodirectory:

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

aggiungi file nascosti:

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

senza sottodirectory:

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

puoi includere l'output che prova che lo fa
— barlop

Come potrei farlo per dare un calcio ai risultati di quel primo comando in un file di testo? Ottengo il seguente errore: "L'operazione richiesta non può essere eseguita su un file con una sezione mappata dall'utente aperta".
— bdb484,

3

Se vuoi solo visualizzare i nomi 8.3 e nient'altro, se usi "dir / -n" otterrai il nome 8.3 all'inizio di ogni riga. Nota: separa l'estensione dal nome file con uno spazio anziché 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

Ma puoi usare "dir / -n" all'interno di un ciclo for in un file batch, quindi estrarre una sottostringa dei primi 12 caratteri per eliminare il resto di ogni riga. Per esempio:

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

"Skip = 7" salta le prime 7 righe, che non sono nomi di file né directory e l'output di "dir / -n" viene inviato attraverso due comandi di ricerca per rimuovere le ultime due righe prodotte da "dir / -n "(il simbolo di pipe" | "deve essere" evaso "da un" ^ ". Poiché l'estrazione della sottostringa si verifica in un ciclo for nel file batch, è necessario" setlocal EnableDelayedExpansion "e"! "deve essere utilizzato con il variabile x anziché "%". Per l'esempio precedente, vedrai il seguente output dall'esecuzione del file batch:

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 più spazi. Prova a creare un file chiamato abc.txtper vederlo in azione. Quindi, per divertirti, crea un file chiamato abc.docx.
— un CVn il

0

Dopo aver giocato con questo per un'ora, ho pensato a quanto segue:

dal prompt prompt:

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

dal file .BAT o .CMD:

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

nota: questo script ha ancora problemi con nomi di file lunghi, ma continuerà e creerà un file di testo 8dot3 che può quindi essere pompato in qualsiasi altro file batch.

Quello che segue è il mio intero file di test .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

Per elencare i file in tutte le sottodirectory, prova questo:

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

 

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.