Wie kann ich mit einer for
Schleife über jede Datei in einem Verzeichnis iterieren ?
Und wie kann ich feststellen, ob ein bestimmter Eintrag ein Verzeichnis oder nur eine Datei ist?
windows
batch-file
for-loop
cmd
Vhaerun
quelle
quelle
Antworten:
Dies listet alle Dateien (und nur die Dateien) im aktuellen Verzeichnis auf:
Wenn Sie diesen Befehl in einer Batchdatei ausführen, müssen Sie die% -Zeichen verdoppeln.
(danke @agnul)
quelle
for /r %i in (*) do ( echo %~nxi )
. Dieser Thread kann auch sehr nützlich sein: stackoverflow.com/questions/112055/… .Iterieren durch ...
for %f in (.\*) do @echo %f
for /D %s in (.\*) do @echo %s
for /R %f in (.\*) do @echo %f
for /R /D %s in (.\*) do @echo %s
Leider habe ich keine Möglichkeit gefunden, Dateien und Unterverzeichnisse gleichzeitig zu durchlaufen.
Verwenden Sie einfach Cygwin mit seiner Bash für viel mehr Funktionalität.
Abgesehen davon: Haben Sie bemerkt, dass die eingebaute Hilfe von MS Windows eine großartige Ressource für Beschreibungen der Befehlszeilensyntax von cmd ist?
Schauen Sie auch hier: http://technet.microsoft.com/en-us/library/bb490890.aspx
quelle
%file
und%subdir
kann nur ein Zeichen lang sein, dh%f
,%s
.Um jede Datei zu durchlaufen, funktioniert eine for-Schleife:
for %%f in (directory\path\*) do ( something_here )
In meinem Fall wollte ich auch den Inhalt, den Namen usw. der Datei.
Dies führte zu einigen Problemen und ich dachte, mein Anwendungsfall könnte helfen. Hier ist eine Schleife, die Informationen aus jeder '.txt'-Datei in einem Verzeichnis liest und es Ihnen ermöglicht, etwas damit zu tun (z. B. setx).
* Einschränkung: val <= %% f erhält nur die erste Zeile der Datei.
quelle
Es gibt einen subtilen Unterschied zwischen der Ausführung
FOR
über die Befehlszeile und über eine Batchdatei. In eine Batch-Datei müssen Sie zwei einfügen%
Zeichen vor jede Variablenreferenz setzen.Über eine Befehlszeile:
Aus einer Batch-Datei:
quelle
Diese for-Schleife listet alle Dateien in einem Verzeichnis auf.
"delims =" ist nützlich, um lange Dateinamen mit Leerzeichen anzuzeigen ....
'/ b "zeige nur Namen, keine Größendaten usw ..
Einige Dinge, die Sie über dir's / a argument wissen sollten.
Wenn Sie dies in der Befehlszeile verwenden, entfernen Sie ein "%".
Hoffe das hilft.
quelle
% 1 bezieht sich auf das erste übergebene Argument und kann nicht in einem Iterator verwendet werden.
Versuche dies:
quelle
Versuchen Sie "HILFE FÜR" in cmd für eine vollständige Anleitung
Dies ist die Anleitung für XP-Befehle. http://www.ss64.com/nt/
quelle
Zum Durchlaufen aller Dateien und Ordner, die Sie verwenden können
Um alle Ordner nur nicht mit Dateien zu durchlaufen , können Sie verwenden
Wo
/s
werden alle Ergebnisse im gesamten Verzeichnisbaum in unbegrenzter Tiefe angezeigt. Du kannst überspringen/s
wenn Sie den Inhalt dieses Ordners und nicht dessen Unterordner durchlaufen möchtenImplementierung in Iteration implementieren
Um bestimmte benannte Dateien und Ordner zu durchlaufen , können Sie nach dem Namen suchen und mit der for-Schleife iterieren
Verwenden Sie denselben Befehl, um bestimmte benannte Ordner / Verzeichnisse und keine Dateien zu durchlaufen
/AD
quelle
Ich hatte Probleme, die Antwort von jop dazu zu bringen, mit einem absoluten Pfad zu arbeiten, bis ich diese Referenz fand: https://ss64.com/nt/for_r.html
Im folgenden Beispiel werden alle Dateien in einem Verzeichnis durchlaufen, das durch den absoluten Pfad angegeben wird.
quelle
Der folgende Code erstellt eine Datei mit dem Namen "AllFilesInCurrentDirectorylist.txt" im aktuellen Verzeichnis, die die Liste aller Dateien (nur Dateien) im aktuellen Verzeichnis enthält. Hör zu
quelle
Es könnte auch den Befehl forfiles verwenden :
und überprüfen Sie auch, ob es sich um ein Verzeichnis handelt
quelle
@isdir==true
muss sein@isdir==TRUE
Ich würde vbscript (Windows Scripting Host) verwenden, da Sie im Batch sicher nicht sagen können, dass ein Name eine Datei oder ein Verzeichnis ist.
In vbs kann es so etwas sein:
Überprüfen Sie FileSystemObject auf MSDN .
quelle
Ich verwende den Befehl xcopy mit der Option / L, um die Dateinamen abzurufen. Wenn Sie also entweder ein Verzeichnis oder alle Dateien im Unterverzeichnis abrufen möchten, können Sie Folgendes tun:
Ich verwende nur das c: \ als Ziel, da es auf Windows-Systemen immer vorhanden ist und nicht kopiert wird, sodass es keine Rolle spielt. Wenn Sie auch die Unterverzeichnisse verwenden möchten, verwenden Sie am Ende einfach die Option / s. Sie können auch die anderen Schalter von xcopy verwenden, wenn Sie sie aus anderen Gründen benötigen.
quelle
Versuchen Sie dies, um zu testen, ob eine Datei ein Verzeichnis ist:
Hier erfahren Sie nur, ob eine Datei KEIN Verzeichnis ist. Dies gilt auch, wenn die Datei nicht vorhanden ist. Überprüfen Sie dies daher bei Bedarf zuerst. Die Carets (^) werden verwendet, um die Umleitungssymbole zu umgehen, und die Ausgabe der Dateiliste wird an NUL umgeleitet, um zu verhindern, dass sie angezeigt wird, während die Fehlerausgabe der DIR-Liste an die Ausgabe umgeleitet wird, damit Sie anhand der DIR-Meldung "Datei nicht gefunden" testen können ".
quelle
Versuche dies:
Es zählt MSI- und EXE-Dateien in Ihrem Verzeichnis (und im Unterverzeichnis). Es macht also auch den Unterschied zwischen Ordnern und Dateien als ausführbare Dateien.
Fügen Sie einfach eine Erweiterung (.pptx .docx ..) hinzu, wenn Sie andere Dateien in der Schleife filtern müssen
quelle
In meinem Fall musste ich alle Dateien und Ordner unter einem temporären Ordner löschen. So kam ich dazu. Ich musste zwei Schleifen ausführen, eine für Datei und eine für Ordner. Wenn Dateien oder Ordner Leerzeichen in ihren Namen haben, müssen Sie "" verwenden
quelle
Hier ist mein Einstieg mit Kommentaren im Code.
Ich werde nur durch Biatch-Fähigkeiten aufgefrischt, also verzeihen Sie alle offensichtlichen Fehler.
Ich habe versucht, eine All-in-One-Lösung so gut wie möglich mit einer kleinen Änderung zu schreiben, wo der Benutzer sie benötigt.
Einige wichtige Hinweise: Ändern Sie die Variable einfach
recursive
in,FALSE
wenn nur die Stammverzeichnisdateien und -ordner verarbeitet werden sollen. Andernfalls werden alle Ordner und Dateien durchsucht.C & C herzlich willkommen ...
quelle