Une autre question d'un utilisateur de longue date d'Unix / Linux qui se retrouve dans un monde Windows. Permettez-moi d'abord d'expliquer exactement ce que j'essaie de faire. J'utilise le shell Windows cmd.exe et je veux répertorier tous les répertoires sous le répertoire actuel qui contiennent une hiérarchie bin \ Debug et déterminer s'ils contiennent des fichiers (par exemple: essayer de déterminer si ma cible propre NAnt est fonctionner correctement). Ma hiérarchie pourrait ressembler à ceci:
\Current
\DirA
\bin
\Debug
(some files under debug)
\Release
\DirB
\bin
\Debug
\DirC
\bin
\Release
Sous Unix, ls */bin/Debug
me donnerait juste une liste de tous les trucs dedans DirA/bin/Debug
, et me montrerait le fait qui DirB/bin/Debug
est vide. J'ai essayé différentes contorsions dans le shell cmd, mais continuez à vous retrouver avec des trucs comme:
> dir * \ bin \ Debug Le nom de fichier, le nom de répertoire ou la syntaxe d'étiquette de volume est incorrect. > dir * \ * \ * Le nom de fichier, le nom de répertoire ou la syntaxe d'étiquette de volume est incorrect.
Y a-t-il quelque chose de subtil que je ne comprends pas à propos de la commande dir, ou est-ce juste limité de cette façon?
Oui, je me rends compte que je peux simplement basculer vers l'explorateur, naviguer, cliquer avec le bouton droit et probablement éventuellement créer une recherche qui fait ce que je veux, mais je suis plus intéressé par la solution de ligne de commande quick-n-dirty.
la source
Réponses:
Quelque chose comme ça devrait faire ce que vous voulez. Dans le répertoire racine du type de projet:
Arguments dir: / s - récursif, / b - "nu", pas d'informations supplémentaires
findstr arguments: / i - ignorer la casse
En général, la « commande d' aide » affichera l'aide pour les commandes shell. Si cela ne fonctionne pas, alors
' commande /?' montrera généralement de l'aide.
la source
Windows ne fait pas de caractères génériques comme le fait Linux. Seule la partie du nom de fichier peut contenir des caractères génériques.
Vous pouvez télécharger une version de ls qui s'exécute sur Windows et l'utiliser. J'ai utilisé Cygwin , mais je suis sûr qu'il y en a d'autres.
la source
unxutils a une commande ls. Le problème est vraiment avec le shell Windows, cependant. Sous Unix, votre shell se développera
*/bin/Debug
dans les chemins d'accès appropriés et les transmettra à la commande ls en tant qu'arguments de ligne de commande distincts.Cygwin ferait certainement l'affaire pour vous, ou vous pourriez essayer un port Windows d'un shell Unix tel que bash . Si vous vouliez suivre la route des scripts, vous pourriez coder quelque chose en python assez facilement en utilisant le module glob , et la plupart des autres langages de script ont un équivalent.
la source
Vous pouvez faire quelque chose comme "dir / s * .obj * lib". Il donnera un résumé à la fin du nombre de fichiers correspondant.
la source
Pas sympa, mais ça devrait marcher. Vous pouvez également mettre dans un fichier .cmd (puis remplacer chaque% unique en double %%). Ou définissez une macro à l'aide de doskey (oui, elle existe toujours).
Assurez-vous que les extensions cmd sont activées.
EDIT: Comment cela fonctionne:
La première boucle for parcourt tous les sous-répertoires (commutateur / D et / r) de manière itérative. % ~ fP se développe sur le chemin complet de ce répertoire. Ensuite, il ajoute \ bin \ Debug * à ce chemin. La seconde boucle for énumère tous les fichiers qui correspondent. % ~ ftzaQ est étendu à chaque correspondance de fichier et imprimé à l'écran par écho. L'étrange% ~ ftzaQ le formate comme une sortie dir. Le caractère @ évite que les commandes elles-mêmes soient imprimées à l'écran.
Pour en savoir plus, voir
la source
Dans le monde Windows, cmd.exe ne développe pas les caractères génériques - ils sont transmis tels quels au programme dans sa ligne de commande ou son tableau argv. Par conséquent, chaque programme les analyse et les développe différemment, et certaines des utilisations les plus avancées (comme celles que vous recherchez) ne sont généralement pas prises en charge.
La suggestion de timgilbert d'utiliser Cygwin est bonne, aussi le paquet GNUWin32 pourrait avoir quelque chose qui vous aidera.
la source