Obtenez les noms de fichiers nus récursivement dans l'invite de commande

19

J'ai rencontré un petit problème en essayant d'obtenir uniquement les noms de fichiers (pas d'extensions ou de chemins de fichiers) de manière récursive, ce qui a fonctionné pour moi dans le dossier racine:

dir /b

Mais quand j'ai ajouté / s pour scanner récursivement, j'ai également obtenu des chemins de fichiers avant les noms de fichiers que je ne veux pas. Existe-t-il un moyen d'obtenir les noms de fichiers nus de tous les sous-dossiers d'un répertoire?

Im sur Windows 7 x64, je préfère utiliser l'invite de commande régulière et non PS ou VBS

TMRW
la source

Réponses:

15

Utilisez la commande suivante:

dir /b /a /s
  • / b supprime la date et d'autres détails de la sortie
  • / a ne produit que le nom de fichier, pas de chemin
  • / s active une liste de répertoires récursive

Si vous devez enregistrer la sortie dans un fichier, vous pouvez utiliser:

dir /b /a /s >> list_of_names.txt

EDIT En fait, la solution ci-dessus n'atteint pas les objectifs de la question d'origine. Une chose que j'ai remarquée dans la question est que le message demande une liste récursive. qui manque à l'autre réponse, donc je pense que l'ajout de "/ s" dans la réponse de l'autre répondeur fera l'affaire

for /f %a in ('dir /b /s') do @echo %~na
Nik So
la source
Pourriez-vous expliquer cela? Pour moi, cela n'a pas de sens.
Simon Sheehan
4
Cela ne fonctionne pas, / a ne fonctionne pas comme ça - c'est un filtre pour quel type de fichiers vous voulez lister. Il ne supprime pas le chemin du nom de fichier lors d'une liste récursive du répertoire.
Gaff
édité la réponse; et vient de mettre la main sur une boîte Windows à nouveau, je pense que cette fois devrait le faire (win732bit)
Nik So
6

Essaye ça:

for /f "delims=" %a in ('dir /b /s') do @echo %~na

Plus d'informations sur la façon dont fonctionne et ce qu'il fait, tapez for /?

Multiverse IT
la source
Cela fonctionne presque mais il y a un gros problème.Il ne produit que le premier mot d'un nom de fichier.Si un nom de fichier est par exemple "mon image de vacances 1" alors il ne produit que "mon"
TMRW
essayez ceci: pour / f "delims = |" % a in ('dir / b') do @echo% ~ na. Par défaut, le paramètre / f de FOR crée des jetons sur les espaces. Définir le jeton sur un caractère qui ne devrait pas apparaître dans les noms de fichiers / répertoires vous donnera le nom complet, y compris les espaces.
Scott McKinney
Si vous voulez que la sortie soit envoyée dans un fichier, ajoutez>> filename.txt
Gruber
2
for /r %i in (*) do @echo %~ni

ou

forfiles /s /c "cmd /c if @isdir==FALSE noquotes.bat @fname"

en supposant un fichier noquotes.batdans votre % PATH% avec ce contenu

@echo %~1

approche for / r expliquée

for /rparcourt le répertoire courant de manière récursive (vous pouvez spécifier un répertoire for /r drive:\path\, le répertoire courant est supposé) et exécute la commande spécifiée par do pour chaque fichier correspondant dans l'ensemble (*). L'ensemble (.)ne correspondrait qu'aux répertoires. @echo% ~ ni Cette commande fonctionne telle quelle à partir de l'invite. Doublez vos devis si vous les placez dans un fichier batch. c'est à direfor /r %%i in (*) do @echo %%~ni

explication de l'approche forfiles

/sénumère le sous-répertoire courant et tous les
/cexécute la commande à l'intérieur des guillemets
@isdiret @fnameest un symbole émis dans la chaîne de commande
Le fichier de commandes supplémentaire noquotes.bataide en supprimant les guillemets doubles avec% ~ 1 (paramètre 1)
forfilesvous permet également de spécifier un chemin pour commencer àforfiles /P C:\Windows ...

JJS
la source
@DavidPostill oui, c'était une mauvaise réponse. Merci pour vos commentaires. Veuillez me faire savoir si je peux encore améliorer ma réponse.
JJS
@DavidPostill vous n'avez aucune réponse ou commentaire précédent. modériez-vous des questions ou cherchez-vous une réponse et trébuchez-vous sur ma mauvaise réponse?
JJS
Votre réponse est apparue dans la file d'attente de révision "Messages de faible qualité". Comme je sais beaucoup de choses sur les fichiers batch, je me suis penché dessus.
DavidPostill
@DavidPostill merci pour votre avis. Je me réjouis de votre examen des modifications que j'ai apportées à ma réponse.
JJS
Beaucoup mieux ... :)
DavidPostill
-1

Liste tous les fichiers, nus, récursivement, à l'aide d'attributs (pas de répertoire) (fichiers uniquement)

dir / B / S / A: -D

C: \ test \ cache> dir / B / S / A: -D

C: \ test \ cache \ 7 \ 0f \ 7b50ed0522645513da90345120eaf0f7 C: \ test \ cache \ d \ 23 \ 814644aa6a8195c91e54d2f7bb64e23d

Brandon Hunt
la source
La question dit que l'OP «essaie d'obtenir uniquement les noms de fichiers (pas d'extensions ou de chemins de fichiers). … Mais quand j'ai [essayé dir /b /s] de numériser récursivement, j'ai aussi des chemins de fichiers avant les noms de fichiers, ce que je ne veux pas. qu'il produit le même résultat que lorsque l'OP l'a essayé (c'est-à-dire pas ce qu'il veut).
Scott