Ensemble Récursif de Profondeur pour la commande dir dans le dos
Je suis actuellement en utilisant la commande suivante pour obtenir la liste des répertoires:
dir /b /s /AD > c:\temp\dir_list.txt
Cela me donne presque la liste que j'ai besoin. Mais c'est beaucoup trop de données, parce que certains dossiers ont de très nombreux sous-dossiers, que je ne veux pas voir dans ma liste.
Est-il possible, pour limiter la profondeur de récursivité de la commande -disons - 3?
c:\dir_1\dir_2\dir_3\dir_foo
Donc, si j'exécute la commande dans l'exemple ci-dessus en c:> je ne veux pas voir le dir_foo répertoire, mais juste le dir_n...
Peut-être sans un lot/vb-script?
pertinentes ; stackoverflow.com/questions/13249085/...
OriginalL'auteur Sauer | 2012-09-18
Vous devez vous connecter pour publier un commentaire.
Je suis sûr qu'il est possible d'écrire une commande complexe que la liste n niveaux de répertoires. Mais il serait difficile de se souvenir de la syntaxe et sujettes à erreur. Il serait également nécessaire de changer chaque fois que vous voulez changer le nombre de niveaux.
Beaucoup mieux d'utiliser un script simple.
EDIT 5 Ans plus Tard - en Fait, il est simple de revêtement qui a été disponible depuis Vista. Voir mon nouveau ROBOCOPY solution.
Voici un lot de la solution qui effectue un parcours en profondeur d'abord d'inscription. La commande DIR /S effectue une largeur à l'inscription, mais je préfère ce parcours en profondeur d'abord format.
La largeur, la première version est presque le même, sauf qu'elle nécessite un supplément POUR la boucle.
Les deux scripts attendre deux arguments:
arg1 = le chemin d'accès du répertoire racine pour être listé
arg2 = le nombre de niveaux à la liste.
Donc à la liste des 3 niveaux du répertoire courant, vous pouvez utiliser
À la liste des 5 niveaux d'un autre répertoire, vous pouvez utiliser
Excellent travail de diagnostic, le bug 🙂 j'ai corrigé le code pour éliminer le bogue.
OriginalL'auteur
Après tout ce temps (5 ans), et je viens de tomber sur une simple ligne de commande d'un paquebot qui a été disponible tout au long de.
ROBOCOPY
a été une norme utilitaire de Windows depuis Vista, et est disponible pour XP via le Kit de Ressources de Windows.Explication
La
/lev:n
option inclut la racine dans le comte, et que vous voulez 3 niveaux de sous-répertoire, qui est pourquoi j'ai ajouté 1 à la valeur.Traitement plus
La sortie n'est pas parfait dans le dossier racine est inclus dans la sortie, et chaque chemin d'accès inclut largeur fixe principaux espaces. Vous pouvez facilement éliminer le chemin de la racine ainsi que les principaux espaces avec
FOR /F
.La
ROBOCOPY
de sortie comprend une première ligne vide, c'est pourquoi laskip
doit être de 2 au lieu de 1.Chaque chemin se terminera avec
\
. J'aime cette fonctionnalité, car elle met en évidence le fait que nous sommes en liste de dossiers et de fichiers. Si vous voulez vraiment éliminer la fuite\
, alors vous pouvez ajouter unFOR
.Mais la commande est en train de devenir un peu maladroits de type. Il devrait être facile à intégrer cette technique dans un utilitaire de fichier de commandes qui prend le chemin de la racine et le niveau des arguments. Vous devez vous rappeler de doubler le pourcentage si vous mettez la commande dans un script batch.
OriginalL'auteur
Voici une solution qui repose sur la profondeur de la première cotation de la solution de @dbenham,
et permet de définir niveau minimum.
Pour définir le niveau minimum est fourni uniquement à titre 3e paramètre.
Par exemple: pour obtenir la liste à partir du niveau 2 au niveau 5, vous pouvez utiliser
Alternativement, vous pouvez lister à partir du niveau de base par laisser ce paramètre vide
OriginalL'auteur
C'est une petite amélioration sur la solution de dbenham (et elady).
Il tirets de sortie en fonction de la profondeur.
Il augmente considérablement la lisibilité.
On peut définir la mise en retrait de caractère dans
set "indent ...
OriginalL'auteur