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.