Ich versuche, Dateien aus allen Unterverzeichnissen zu bewegen, die keine Verlängerung .bz2 am Ende haben: Batch: Datei verschieben, wenn Erweiterung nicht (.bz2)
Es soll alle Erweiterungen bewegen, die aren ‚t mit der Endung (.bz2) ich habe versucht, dies:
for /R C:\AppServ\fastdl %f in (*) do @if not exist (*.bz2) move /Y * C:\AppServ\fastdl\not_bzip >NUL
Aber das Skript versucht, Ordner zu verschieben und auch wie versagt:
und wenn ich setze% f statt Bewegung/Y * es wird sich bewegen e .bz2 Dateien.
Danke Mann, rettete meinen Tag! – Mike
Es ist sehr gefährlich, ein Verzeichnis (Baum) innerhalb einer 'for' ('/R') Schleife zu manipulieren - siehe diese Frage: [An welchem Punkt zählt 'for' oder' for/R' das Verzeichnis (Baum)?] (http://stackoverflow.com/q/31975093) Verwenden von 'for/F" delims = "% F in ('Verzeichnis/B/S" C: \ AppServ \ fastdl \ * "') tun (. ..) '(ähnlich wie [Noodles 'answer] (http://stackoverflow.com/a/39761641)) stellt sicher, dass der Verzeichnisbaum aufgelistet wird * bevor * er manipuliert wird. Übrigens sollten Sie Anführungszeichen wie 'if '% ~ xf" NEQ ".bz2" 'verwenden, um Probleme mit Dateien ohne eine Erweiterung zu vermeiden ... – aschipfl
Ich denke, das Wort gefährlich ist ein wenig zu dramatisch, sie verschieben Dateien Sie werden nicht gelöscht. Ich verstehe die Abstürze mit dieser Methode, aber was sind wirklich die Chancen, dass der Baum in diesem laufenden Skript dynamisch geändert wird. Ähnliches gilt auch für die Möglichkeit von Dateien ohne Erweiterung, während es eine geringe Chance gibt, insbesondere wenn das OP eine schnelle Probe in seinem Beitrag lieferte. Selbst wenn ich den dir-Befehl verwende, würde ich immer noch ** - d ** und ** - s -h ** vorschreiben, wobei auch System- und versteckte Dateien umgangen werden. Es ist robust genug für den allgemeinen Gebrauch, nicht für jeden Gebrauch. – Compo