2010-11-04 2 views

Antwort

13

XCOPY ausgelegt ist, mit 'ausschließen Listen zu arbeiten ... Siehe unten:

dir /b /a-d "source"|findstr /b "aaa" >"%temp%\aaafiles.tmp" 

    xcopy "source" "destination\" /exclude:%temp%\aaafiles.tmp /y 

Die erste Zeile ein DIR (Verzeichnis) Auflistung der Ordner Quelle führt, Auflisten von Dateien im nackten Format (/b), die Verzeichnisnamen ignorieren (/ad). Der Ausgang wird in den Befehl FINDSTR geleitet.

FINDSTR schaut auf jedem Dateinamen und vergleicht sie fängt (/b) mit der Zeichenfolge "aaa".

Wenn der Start eines Dateinamens die Zeichenfolge entspricht „aaa“, der Dateiname umgeleiteten (geschrieben) in die Datei aaafiles.tmp in den Benutzer TEMP Verzeichnis.

Die /b ist wichtig, weil Sie wollen nicht ausschließen, Dateien wie theaaafile.txt.

Die XCOPY Befehl kopiert Dateien aus dem Quelle Ordner in den Ziel Ordner außer Dateien, die in aaafiles.tmp aufgeführt sind.

Die Aufforderung zum Überschreiben vorhandener Dateien (/y) ist deaktiviert.

Quelle und Destination müssen Ihre eigenen Ordnernamen ersetzt werden.

+0

große Lösung! danke – eze1981

+2

Es ist eine Dateikopie, aber kein Zug. Bei großen Dateien kann eine Kopie extrem langsam sein, während eine Bewegung auf demselben Volume fast sofort erfolgt. – Adisak

+0

Hinweis: Ich fand auch die Option '/ S' (Verzeichnisinhalt rekursiv anzeigen) sinnvoll. – Antonio

4

Eine Möglichkeit, starten Sie tun können, es ist eine Liste der Dateien erstellen, in einer temporären zu bewegen Datei. Verwenden Sie dann die Datei mit dem Befehl for. Generieren Sie die Liste mit findstr.

> dir/b/a-d | findstr /v aaa* > "%temp%\@movelist" 
> for /f %f in (%temp%\@movelist) do move %f ... 

Der erste Befehl wird eine Liste aller Dateien (ohne Verzeichnisse) im aktuellen Verzeichnis und dann Rohre, die Liste zu findstr das ausschließt (/v) Dateinamen, die das Muster und legt sie in der @movelist Datei entsprechen in das temporäre Verzeichnis Der zweite Befehl nimmt nur diese Ergebnisse, so dass Sie tun können, was Sie mit ihnen tun werden (verschieben Sie es).

Es gibt wahrscheinlich einen besseren Weg, um es in einem einzigen Befehl ohne die temporäre Datei zu tun, ich weiß einfach nicht, wie man es schreibt. Ich bin mir nicht sicher, wie ich den Befehl dir aus dem Befehl for aufrufen kann. AFAIK es braucht nur Programmdateien, die existieren, keine eingebauten Befehle.

2

Wenn es Ihnen nichts ausmacht, mit dem Archiv-Bit zu spielen, können Sie es verwenden, um Dateien basierend auf einer Dateimaske selektiv zu kopieren und zu löschen.

Verschieben (kopieren und löschen) aller Dateien außer denen, die mit "aaa" beginnen vom aktuellen Verzeichnis zu "dest". Kann auch den vollständigen Quellpfad angeben.

attrib +a *.* 
attrib -a aaa*.* 
xcopy /a [or /m] *.* dest 
del /aa /q *.* 
2

In einigen Fällen kann es einfacher gemacht werden. Zum Beispiel hatte ich rekursiv ein paar Verzeichnisse zu kopieren, aber ohne alle Bilder (PNG und BMP-Dateien), so habe ich einfach erstellt eine excludeList.txt Datei enthält:

.png 
.bmp 

und

xcopy /S /I <source> <dest> /exclude:c:\excludeList.txt 

Es läuft Übereinstimmung mit einer Datei oder einem Verzeichnis mit.png, aber nicht notwendigerweise endend von .png. (Ich habe nicht untersucht, ob eine intelligente Verwendung von Platzhaltern oder regulären Ausdrücken möglich ist). Es ist nicht Ihr spezielles Beispiel Griff (für die Sie bereits eine gute Antwort), aber es ist mein Problem gelöst, und diese Seite ist das, was ich fand, als ich auf der Suche nach einer Lösung gegoogelt :)