2016-09-28 5 views
0

Ich versuche, Dateien aus allen Unterverzeichnissen zu bewegen, die keine Verlängerung .bz2 am Ende haben: enter image description hereBatch: 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: enter image description here

und wenn ich setze% f statt Bewegung/Y * es wird sich bewegen e .bz2 Dateien.

Antwort

0

Sie wahrscheinlich so etwas wollen:

For /R "C:\AppServ\fastdl" %f In (*) Do @If %~xf NEq .bz2 (@Move /Y "%~f" "C:\AppSrv\not_bzip">Nul) 

Bitte beachten Sie, dass ich den Umzug in das Verzeichnis geändert haben, müssen Sie es zuerst sich selbst erstellen und sicherstellen, dass es irgendwo anders ist als ein Unterverzeichnis des Baumes Ordner Sie scannen.

+0

Danke Mann, rettete meinen Tag! – Mike

+0

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

+0

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

0
For /f "delims=" %A in ('dir /b /s "c:\windows\syswow64" ^| Findstr /v /I /c:".dll"') Do Echo %A 

Alle Dateien außer DLL-Dateien auflisten.

+0

Eigentlich sollte die Suchzeichenfolge '.dll $' sein, um die Übereinstimmung am Ende der Dateinamen zu verankern; Andernfalls würde etwas wie "this.is.not.a.dll.file.txt" fälschlicherweise übereinstimmen ... – aschipfl

Verwandte Themen