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