comment lister tous les fichiers et répertoires dans un répertoire donné avec un chemin complet mais pas récursif?

14

En quelque sorte, comme la dir /bcommande, mais j'ai également besoin de fichiers cachés et système. La commande dir intégrée ne permet pas de lister de tels fichiers «cachés» avec le reste et je dois utiliser /spour y avoir un chemin complet, ce qui est bien sûr non récursif.

J'ai également joué avec la version Windows de la lscommande et il n'y a pas eu de chance non plus. Pour afficher le chemin complet, vous devez ajouter un astérisque ( mydir\*) à la fin du répertoire que vous répertoriez, mais cela le rend récursif.

rsk82
la source
1
Je peux résoudre une partie de votre problème: l'indicateur / a fait que dir inclut les fichiers cachés et les fichiers système.
Harry Johnston

Réponses:

9

Si vous ne souhaitez rien installer, vous pouvez également utiliser la commande suivante:

for /f "delims=" %a in ('cd') do @for /f %b in ('dir /b /a') do @echo %a\%b

Vous devez d'abord cddans le répertoire ou cela ne fonctionnera pas.

Dennis
la source
2
ou ca! for / f "delims ="% b in ('dir / b / a') do @echo% cd% \% b Mais la vôtre est une technique intéressante, assez générique
barlop
pourriez-vous expliquer comment fonctionne cette commande?
rubo77
18

Essayez la commande suivante:

dir /s /b /a

Il donnera TOUS les fichiers, vous pouvez l'exécuter FINDsi vous le souhaitez ou ajouter un nom de dossier.

bjkamp
la source
1

Si vous avez essayé ls, pourquoi ne pas simplement installer cygwin? Vous pouvez utiliser find dans cygwin:

find -name "*"

Si vous installez cygwin et souhaitez utiliser find dans cygwin, assurez-vous que la recherche dans cygwin est appelée soit en utilisant le chemin complet, soit en insérant le chemin du bac cygwin avant system32 car Windows a également un find.exe.

Codisme
la source
j'ai vérifié unixutils, la recherche est récursive :(
rsk82
2
@ rsk82: Avec -maxdepth 1, il est pas.
Dennis
0

vous pouvez télécharger sed avec gnuwin32. Cela ajoute le répertoire actuel.

Faire% cd% ne fonctionne pas. %cd:\=\\% convertit tout \en \\, ce qui se traduit par \.

C:\WINDOWS>dir /b | sed "s/^/%cd:\=\\%\\/" 
C:\WINDOWS\0.log
C:\WINDOWS\003109_.tmp
C:\WINDOWS\addins
barlop
la source
0

C'est une vieille question, mais je pensais ajouter quelque chose de toute façon.

DIR ne traverse pas correctement toutes les arborescences de répertoires que vous souhaitez, en particulier celles de C :. Il abandonne simplement par endroits en raison de différentes protections.

ATTRIB fonctionne beaucoup mieux, car il en trouve plus. (Pourquoi cette différence? Pourquoi MS ferait fonctionner un utilitaire dans un sens et un autre dans ce domaine? Damné si je sais.) D'après mon expérience, le moyen le plus efficace de gérer cela, bien que ce soit un peu compliqué, est d'obtenir deux listes:

attrib /s /d C:\ >%TEMP%\C-with-directories.txt

attrib /s C:\ >%TEMP%\C-without-directories.txt

et faire la différence entre eux. Cette différence, ce sont les répertoires sur C: (sauf ceux qui sont trop bien cachés). Pour C :, je le fais généralement en tant qu'administrateur.

djc
la source
0

Je voulais travailler avec une liste de répertoires, alors j'ai cherché sur Google "Imprimer un répertoire". J'ai trouvé des instructions pour le faire, mais elles comprenaient des modifications au Registre. Ne voulant pas me débrouiller avec cela, et voulant utiliser une liste, pas l'imprimer, j'ai trouvé un moyen d'atteindre mes objectifs sans changer le registre. J'ai créé deux programmes de fichiers batch à enregistrer dans un répertoire utilitaire. Ensuite, lorsque je voulais imprimer ou travailler avec un répertoire, je copie simplement le fichier de commandes approprié dans le répertoire sujet, puis je l'exécute! Les voici:

rem PrintThisDirectory.bat
rem Prints the directory where it resides
@echo off
dir %1/-p/o:gn> "%temp%\listing"
start /w notepad "%temp%\listing"

Rem ShowThisDirectory.bat
Rem Displays in Notepad the Directory where it resides
@echo off
dir %1/o:gn> "%temp%\listing"
start /w notepad "%temp%\listing"
Roger Bohl
la source