Eine weitere Frage von einem langjährigen Unix / Linux-Benutzer, der sich in einer Windows-Welt befindet. Lassen Sie mich zunächst genau erklären, was ich zu tun versuche. Ich verwende die Windows-Shell cmd.exe und möchte alle Verzeichnisse unter dem aktuellen Verzeichnis auflisten, die eine bin \ Debug-Hierarchie enthalten, und feststellen, ob sie Dateien enthalten (z funktioniert richtig). Meine Hierarchie könnte ungefähr so aussehen:
\Current
\DirA
\bin
\Debug
(some files under debug)
\Release
\DirB
\bin
\Debug
\DirC
\bin
\Release
ls */bin/Debug
Würde mir in Unix nur eine Liste aller Sachen geben DirA/bin/Debug
und mir zeigen, dass diese DirB/bin/Debug
leer sind. Ich habe verschiedene Verrenkungen in der Cmd-Shell ausprobiert, aber immer wieder mit Dingen wie:
> dir * \ bin \ Debug Der Dateiname, der Verzeichnisname oder die Datenträgerbezeichnungssyntax sind falsch. > dir * \ * \ * Der Dateiname, der Verzeichnisname oder die Datenträgerbezeichnungssyntax sind falsch.
Gibt es etwas Feines, das ich nicht verstehe, oder ist es nur so begrenzt?
Ja, mir ist klar, dass ich einfach zum Explorer wechseln, navigieren, mit der rechten Maustaste klicken und möglicherweise eine Suche erstellen kann, die genau das tut, was ich will, aber ich bin mehr an der Quick-n-Dirty-Befehlszeilenlösung interessiert.
quelle
Antworten:
So etwas sollte tun, was Sie wollen. Im Stammverzeichnis des Projekttyps:
Dir-Argumente: / s - rekursiv, / b - "blank", keine zusätzlichen Informationen
findstr-Argumente: / i - Groß- / Kleinschreibung ignorieren
Im Allgemeinen zeigt der Befehl 'help ' die Hilfe für die Shell-Befehle an. Wenn das nicht funktioniert, dann
' command /?' wird in der Regel Hilfe zeigen.
quelle
Windows verwendet keine Platzhalter wie Linux. Nur der Dateinamenteil kann Platzhalter enthalten.
Sie können eine Version von ls herunterladen, die unter Windows ausgeführt wird, und diese verwenden. Ich habe Cygwin benutzt , aber ich bin mir sicher, dass es noch andere gibt.
quelle
unxutils hat einen ls Befehl. Das Problem liegt jedoch wirklich in der Windows-Shell. Unter Unix erweitert Ihre Shell
*/bin/Debug
die relevanten Pfadnamen und gibt sie als separate Befehlszeilenargumente an den Befehl ls weiter.Cygwin würde sicherlich den Trick für Sie tun, oder Sie könnten einen Windows-Port einer Unix-Shell wie Bash ausprobieren . Wenn Sie sich für Skripte interessieren, können Sie mit dem Glob-Modul ganz einfach etwas in Python programmieren , und die meisten anderen Skriptsprachen haben ein Äquivalent.
quelle
Sie können so etwas wie "dir / s * .obj * lib" machen. Am Ende wird eine Zusammenfassung angezeigt, wie viele Dateien übereinstimmen.
quelle
Nicht schön, sollte aber funktionieren. Sie können auch eine .cmd-Datei erstellen (dann jedes einzelne% durch doppeltes %% ersetzen). Oder definieren Sie ein Makro mit doskey (ja, es existiert noch).
Stellen Sie sicher, dass die cmd-Erweiterungen aktiviert sind.
EDIT: Wie es funktioniert:
Die erste for-Schleife durchläuft alle Unterverzeichnisse (/ D und / r) iterativ. % ~ fP wird auf den vollständigen Pfad dieses Verzeichnisses erweitert. Dann wird \ bin \ Debug * an diesen Pfad angehängt. Die zweite for-Schleife listet alle übereinstimmenden Dateien auf. % ~ ftzaQ wird auf jede Dateiübereinstimmung erweitert und per Echo auf den Bildschirm gedruckt. Das seltsame% ~ ftzaQ formatiert es wie eine Dir-Ausgabe. Das @ -Zeichen verhindert, dass die Befehle selbst auf dem Bildschirm gedruckt werden.
Für mehr sehen Sie
quelle
In der Windows-Welt erweitert cmd.exe keine Platzhalter - sie werden unverändert an das Programm in der Befehlszeile oder im argv-Array übergeben. Daher werden sie von jedem Programm unterschiedlich analysiert und erweitert, und einige der fortgeschritteneren Anwendungen (wie Sie sie suchen) werden im Allgemeinen nicht unterstützt.
timgilberts Vorschlag , Cygwin zu verwenden, ist gut, auch das GNUWin32-Paket könnte etwas enthalten, das Ihnen helfen wird.
quelle