Ich habe nur versucht, ein Dump-Verzeichnis nach ZIP-Programmen wie PeaZip, NanoZip usw. zu durchsuchen, und bin auf ein seltsames Problem gestoßen, das ich nur ein paar Mal zuvor gesehen habe.
Ich benutzen den folgenden Befehl zur Liste Dateien , deren Dateinamen enthalten zip
(zB nanozip.zip
, peazip2.rar
, winzip-beta.exe
usw.):
dir *zip*
Hier werden alle Dateien aufgelistet, deren Dateinamen enthalten sind zip
, aber auch alle Dateien mit einer .zip
Erweiterung (z foobar.zip
. B. ).
Ich habe dann folgendes probiert:
dir *zip*.*
Dies ergab die gleichen Ergebnisse.
Kennt jemand einen Weg, um die erwarteten Ergebnisse zu erzielen? (Ich weiß, dass das for
vielleicht möglich ist, aber die Ausgabe ist nicht korrekt.)
zip
dem Namen. Wenn dies der Fall ist und ich Ihr Ziel nicht missverstanden habe, warum reicht es dann nicht aus, das Offensichtliche zu tun und.exe
Ihrem Muster lediglich die Erweiterung hinzuzufügen , zdir *zip*.exe
..rar
,.zip
,.exe
usw. daher der Titel und Fragen zu Dateien gezielt zu fragen.zip
außer in der Erweiterung enthalten sind?Antworten:
Problem
Das Auflisten aller Dateien
zip
im Basisnamen (vor dem letzten Punkt, falls vorhanden) ist aus zwei Gründen schwierig:Windows hat nur zwei Platzhalter:
*
und?
.*
Entspricht einer beliebigen Anzahl von Zeichen (einschließlich Null).?
Entspricht genau einem Zeichen (außer dem Punkt), es sei denn, es ist das letzte Zeichen des Musters, gefolgt von einem Punkt, nur anderen Platzhaltern oder nur anderen Platzhaltern und dann einem Punkt. 1Es gibt keine tatsächliche Erweiterung in langen Dateinamen. Die GUI behandelt möglicherweise alles, was auf den letzten Punkt folgt, als Dateierweiterung, aber das ist nur eine Konvention.
Hat
.
eine besondere Bedeutung in der Eingabeaufforderung. Vor LFN hatte jede Datei eine Erweiterung (obwohl sie leer sein könnte). Daher wurden*.*
alle Dateien abgeglichen, während*
nur Dateien mit einer leeren Erweiterung abgeglichen wurden.Aus Gründen der Abwärtskompatibilität wird
.
es ignoriert, wenn nur Platzhalter und andere Punkte folgen, es sei denn, die Punkte sind benachbart und werden von mindestens einem Platzhalter gefolgt, oder es gibt überhaupt keinen Platzhalter und höchstens einen einzelnen Stern vor dem Punkt. 1Beispiele:
foo?.bar
stimmt mit der Datei überein, stimmtfoo.bar
aberfoo?bar
weder mitfoobar
noch mit übereinfoo.bar
.*
,*.*
,*.*.
,*.*.*
Und**.
werden alle Dateien in einem bestimmten Ordner anzeigen lassen, während*.
,*..
und*..*
wird nicht.Umgehung
Wenn Sie das Archivbit nicht zum Ausführen inkrementeller Sicherungen 2 verwenden , können Sie die Dateien, an denen Sie interessiert sind (und nur diese), nur mit DIR und dem Befehl ATTRIB anzeigen .
Schritte:
Setzen Sie zunächst das Archivbit für alle Dateien, die
zip
irgendwo in ihren jeweiligen Dateinamen enthalten sind:Deaktivieren Sie jetzt das Archivbit für alle Dateien mit der
zip
Erweiterung:Wenn Sie Dateien ausschließen möchten, deren jeweilige Erweiterung ebenfalls mit
zip
(z. B.ezip
) endet , verwenden Sie stattdessen den folgenden Befehl:Da
*.*zip
auch die 8.3-Dateinamen getestet werden, werden auch Dateien abgeglichen, deren jeweilige Erweiterung mitzip
(z. B.zipx
) beginnt , es sei denn, die 8.3-Dateinamen sind nicht vorhanden oder wurden geändert.Da der vorherige Befehl das Archivierungsbit für Dateien wie
nanozip.zip
deaktiviert hat, setzen Sie diese zurück:Jetzt können Sie den
/AA
Schalter des Befehls DIR verwenden, um nur Dateien mit einem gesetzten Archivbit anzuzeigen:Mit dem
/S
Schalter auf DIR und dem/S [/D]
Schalter auf ATTRIB funktioniert dies sogar für Dateien in Unterverzeichnissen.1 Dies ist eher eine Liste von Macken als eine erschöpfende Erklärung des Wildcard-Verhaltens.
2 NTBackup von Windows XP berücksichtigt z. B. das Archivbit.
quelle
unless the 8.3 filenames aren't present or have been altered.
Ich lasse 8.3 immer aktiv und ändere den gelegentlichen Dateinamen nur manuell, um Nicht-ASCII-Zeichen zu entfernen, damit sich Norton DiskEdit nicht beschwert;-)
.Kein netter, aber funktionierender.
dir | findstr ini..*
dots
werden als regulärer Ausdruck verwendet, bedeutet ein beliebiges Zeichen und*
von 0 bis unendlichDer einzige Nachteil ist, dass es keine Dateien ohne Erweiterung bearbeitet.
quelle
for
Befehl funktioniert auch dies nicht, da alle anderen Informationen wie der Datenträgername, die Seriennummer, die Gesamtzahl der Bytes, die freien Bytes usw. entfernt werden.zip
... in der Erweiterung haben, ..." Wen / was zitieren Sie? Ich sehe diese Aussage nirgendwo anders auf dieser Seite.Wenn Sie bereit sind, "Augapfel" dann verwenden
Dadurch wird die Ausgabe nach Erweiterung sortiert, und die mit der Erweiterung .zip werden visuell ignoriert - alle werden zu einer Gruppe zusammengefasst.
Für eine Liste, die Sie untersuchen, massieren usw. können, senden Sie die Ausgabe in eine Datei:
quelle
/O
Schalter ohne Parameter sortiert standardmäßig nach Dateiname (dh gleich/on
). Die falschen Elemente (z. B.foobar.zip
) würden weiterhin mit den legitimen Elementen durchsetzt./oe
noch zu viel manuelles "Augenzwinkern" erfordern, da die legitimen Dateien mit den falschen durchsetzt wären (z. B.nanaozip.zip
irgendwo dazwischen liegennabble.zip
undquargle.zip
- zum Beispiel -). Zugegeben, es würde es ein bisschen einfacher machen, da die fehlenden Einträge auf diese Weise weniger sind, aber es ist immer noch blasser als es sollte.:-D
Ich gebe hier +1, denn selbst wenn die falschen Einträge in der Mitte sind (z. B. dir / oe noo ), macht es das immer noch ein bisschen einfacher.ZIP
in ihrem Dateinamen, selbst wenn sie auch habenZIP
in ihrer Verlängerung (einen subtilen Punkt, den ich sehe nicht , Dinkel in Ihre Frage), und daherdir | findstr /i /v /r "\..*zip"
wären zum Beispiel Antworten wie nicht akzeptabel. (Es wäre vielleicht klarer, wenn Sie gesagt hätten: "Da nur sehr wenige legitime Dateien mit den falschen durchsetzt wären.")findstr /v "\..*zip"
) aus und tue es danndir *zip*zip*
. Ich gehe davon aus, dass Sie keine Dateien haben, dieZIP
die Erweiterung zweimal haben . :)Versuchen:
Lassen Sie das / i weg, wenn Sie nach Groß- und Kleinschreibung suchen möchten
quelle
dir
wie der Name des Volumes, die Seriennummer, die Gesamtgröße, der freie Speicherplatz usw. entferntdir
. Außerdem werden keine Dateien aufgelistet, die keine Erweiterung haben (z. B.blahzip
). Dies bedeutet, dass auch die meisten Verzeichnisse fehlen.Ähnlich wie bei der obigen Wochenlösung:
Dies sollte alles finden, was "zip" enthält, gefolgt von einer beliebigen Anzahl von Zeichen, gefolgt von einem "." und eine beliebige Anzahl von Buchstaben, gefolgt vom Ende des Dateinamens. Habe ich noch etwas vermisst?
quelle
nanozip.zip
.*
wird zum Kursivsetzen verwendet.Zum Testen sind dies einige gültige Dateinamen, die ich verwendet habe (dh solche, die irgendwo im Dateinamen "zip" haben, wobei die Erweiterung keine Rolle spielt):
Ungültige Dateinamen:
In Anbetracht der oben genannten Umstände und mangelnder Unterstützung für das "|" (oder) und "+" (eines oder mehrere) in findstr . Ich glaube, dass das, wonach Sie suchen, nicht nur mit Standard- Windows-Dienstprogrammen ausgeführt werden kann. Auch, während die andere dir Ausgangsleitungen wie jene , „Volumen“ oder „Verzeichnis“ oder „Bytes“ enthalten , können aufgenommen werden, indem finden oder findstr die Ausgabe filtern dir bedeutet automatisch , dass die passende Datei- und Verzeichnis Zählung falsch sein ( Es zeigt die Dateien und Verzeichnisse dirursprünglich gefunden, nicht die, die nach dem Filtern angezeigt werden). Aus dem gleichen Grund ist natürlich auch die Gesamtgröße der übereinstimmenden Dateien falsch, obwohl die freien Bytes korrekt sind, da dies nicht von den zurückgegebenen Ergebnissen abhängt.
Dies könnte möglich sein , eine verschlungene Batch- oder Powershell - Skript, aber wirklich, an diesem Punkt könnten Sie auch Ihr eigenes Programm in C oder ähnlichen Code.
quelle
dir
Befehl scheint einen Fehler (oder bestenfalls einen gravierenden syntaktischen Mangel) zu haben, der verhindert, dass eine einfache Aufgabe funktioniert. Zugegeben, es gibt Tools, die Verzeichnislisten bereitstellen können, aber ich mag es nicht, Tools von Drittanbietern mit ihrer stark unterschiedlichen Ausgabe zu verwenden. Ich bin an das Ausgabeformat von gewöhntdir
und verlasse mich in einigen Fällen sogar darauf (zum Beispiel beim Vergleichen von Verzeichnislisten). ☹dir
Ersatz gesucht . Leider muss ich noch einen guten finden (in der Tat habe ich im Allgemeinen nur wenige gesehen; die meisten sind GUIs, mit denen Sie eine Liste in einer Datei anstelle von Konsolentools speichern können).:-(
Diese Batchdatei sollte für Sie funktionieren.
Wenn Sie es ohne Befehlszeilenargumente ausführen, wird eine Liste wie folgt angezeigt:
Es werden jedoch Dateien herausgefiltert, die im "name" -Teil des Dateinamens kein "zip" enthalten (die Erweiterung wird ignoriert). Ich habe angenommen, dass ein Dateiname, der "zip" im Namen und Erweiterung enthält, eine gültige Übereinstimmung ist, wie:
Wenn Sie es mit einem Argument (wie "txt" oder "txt" oder "beliebiger Text") ausführen, wird es dasselbe tun, außer das angegebene Argument anstelle von "zip" zu verwenden.
Diese Batch-Datei zeigt auch die richtige Dateianzahl und Dateigrößenübersicht an.
Bitte lassen Sie mich wissen, wenn es nicht das tut, was Sie brauchen.
quelle
Heutzutage gibt es keinen guten Grund, cmd.exe zu verwenden. Power Shell:
quelle
dir
in PS völlig anders als die der Eingabeaufforderung, so dass es, wie ich in der Frage sagte, sowieso keine Option ist.