web-dev-qa-db-fra.com

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

Je sais que "dir/w" ou "dir/b" ne montre que le nom du fichier. Alors que "dir/x" ou "dir/X" indique le format 8.3, toutes les autres informations, comme les noms de fichier de format long, les dates et la taille, sont également affichées.

est-il possible d'appeler dir, qui ne montre que les noms de fichiers (sans indiquer les dates ni les tailles) et le montre au format 8.3?

8
athos
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
8
STTR

Si vous voulez seulement afficher les noms 8.3 et rien d’autre, 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 pour 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!
)

"Skip = 7" ignore les 7 premières lignes, qui ne sont ni des noms de fichiers ni de répertoires, et la sortie du "dir/-n" est acheminée via deux commandes de recherche pour supprimer les deux dernières lignes générées par "dir/-n "(le symbole de tuyau" | "doit être" échappé "par un" ^ ". L'extraction de sous-chaîne ayant lieu dans une boucle for du lot fichier, "setlocal EnableDelayedExpansion" est nécessaire et "!" doit être utilisé avec la variable x plutôt que "%". Pour l'exemple ci-dessus, vous obtiendrez alors la sortie suivante de l'exécution du fichier de traitement par lots:

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
3
moonpoint

Après avoir joué avec cela pendant une heure, je suis arrivé avec ce qui suit:

à partir de l'invite de DOS:

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

du fichier .BAT ou .CMD:

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

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

Voici mon fichier .Bat de test complet:

@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
Chicago Galloway

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

0
ramu