commande dir en ligne de commande windows: afficher uniquement le nom du fichier, au format 8.3?

11

Je sais que "dir / w" ou "dir / b" n'affiche que le nom du fichier. Tandis que "dir / x" ou "dir / X" montre le format 8.3, mais ensemble montre toutes les autres informations comme les noms de fichiers au format long, les dates et la taille.

est-il possible d'appeler dir, qui ne montre que les noms de fichiers (ne montrant pas les dates ou les tailles), et montrant cela au format 8.3?

athos
la source

Réponses:

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

sans sous-répertoire:

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

ajouter des fichiers cachés:

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

sans sous-répertoire:

for /F "tokens=*" %A in ('dir /B/A:- *') do @echo %~nsA %~nA
STTR
la source
pouvez-vous inclure une sortie qui prouve que c'est le cas
barlop
Comment pourrais-je l'obtenir pour lancer les résultats de cette première commande dans un fichier texte? J'obtiens l'erreur suivante: "L'opération demandée ne peut pas être effectuée sur un fichier avec une section mappée par l'utilisateur ouverte."
bdb484
3

Si vous voulez juste que les noms 8.3 et rien d'autre soient affichés, si vous utilisez "dir / -n" vous obtiendrez le nom 8.3 au début de chaque ligne. Remarque: il sépare l'extension du nom de fichier avec un espace plutôt qu'un point.

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

Mais vous pouvez utiliser le "dir / -n" dans une boucle for dans un fichier batch puis extraire une sous-chaîne des 12 premiers caractères pour se débarrasser du reste de chaque ligne. Par exemple:

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

Le "skip = 7" saute les 7 premières lignes, qui ne sont pas des noms de fichiers ou de répertoires et la sortie du "dir / -n" passe par deux commandes find pour supprimer les deux dernières lignes produites par "dir / -n "(le symbole de canal" | "doit être" échappé "par un" ^ ". Comme l'extraction de la sous-chaîne se produit dans une boucle for dans le fichier de commandes," setlocal EnableDelayedExpansion "est nécessaire et"! "doit être utilisé avec le variable x plutôt que "%". Pour l'exemple ci-dessus, vous verrez alors la sortie suivante lors de l'exécution du fichier de commandes:

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
point de lune
la source
Nitpick: un ou plusieurs espaces. Essayez de créer un fichier nommé abc.txtpour le voir en action. Ensuite, pour le plaisir, créez un fichier nommé abc.docx.
un CVn du
0

Après avoir joué avec cela pendant une heure, j'ai trouvé ce qui suit:

à partir de l'invite dos:

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

à partir d'un fichier .BAT ou .CMD:

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

Remarque: ce script a toujours un problème avec les noms de fichiers longs, mais il continuera et créera un fichier texte 8dot3 qui peut ensuite être pompé dans n'importe quel autre fichier de commandes.

Ce qui suit est tout mon fichier de 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%"
Chicago Galloway
la source
0

Pour lister les fichiers dans tous les sous-répertoires, essayez celui-ci:

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

 

ramu
la source