2010-11-04 14 views

risposta

13

XCOPY è progettato per funzionare con 'esclude' liste ... Vedere sotto:

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

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

La prima riga esegue un (directory) elenco DIR del cartella di di origine, elencare i file in formato non formattato (/b) ignorando i nomi delle directory (/annuncio). L'uscita è collegata al comando FINDSTR.

FINDSTR guarda ogni nome di file e lo confronta sta cominciando (/b) con la stringa "aaa".

Se l'inizio di un nome di file corrisponde alla stringa "aaa", il nome del file viene reindirizzato (scritto) al file aaafiles.tmp negli utenti TEMP directory.

Il /b è vitale perché non si vuole escludere i file come theaaafile.txt.

I XCOPY comando copia i file dalla cartella diorigine alla cartella di destinazione eccezione dei file elencati nella aaafiles.tmp.

La richiesta di sovrascrivere i file esistenti (/y) è disattivata.

fonte e destinazione sarà necessario sostituire i propri foldernames.

+0

grande soluzione! grazie – eze1981

+2

È una copia di file, non una mossa. Con file di grandi dimensioni, una copia può essere estremamente lenta mentre una mossa sullo stesso volume è quasi istantanea. – Adisak

+0

Nota: ho trovato anche l'opzione '/ S' (visualizza il contenuto della directory in modo ricorsivo) utile. – Antonio

4

Un modo per farlo è creare una lista di file da spostare in una temporanea file. Quindi utilizzare il file con il comando for. Generare la lista usando findstr.

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

Il primo comando ottiene un elenco di tutti i file (senza directory) nella directory corrente e poi tubi l'elenco di findstr che esclude (/v) i nomi dei file che corrispondono al modello e lo mette nel file @movelist in la directory temporanea. Il secondo comando prende solo quei risultati in modo che tu possa fare ciò che vuoi con loro (spostalo).

Probabilmente esiste un modo migliore di farlo in un singolo comando senza il file temporaneo, non so proprio come scriverlo. Non sono sicuro di come chiamare il comando dir dal comando for. AFAIK richiede solo file di programma esistenti, non comandi incorporati.

2

Se non ti dispiace manipolare il bit di archivio, puoi usarlo per copiare ed eliminare selettivamente i file in base a una maschera di file.

Sposta (copia e cancella) tutti i file tranne quelli che iniziano con "aaa" dalla directory corrente a "dest". Può anche specificare il percorso completo dell'origine.

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

In alcuni casi può essere reso più semplice. Per esempio, ho dovuto copiare in modo ricorsivo una serie di directory, ma escludendo tutte le immagini (file bmp png e), così ho semplicemente creato un file excludeList.txt contenente:

.png 
.bmp 

ed eseguire

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

sarà corrisponde a qualsiasi file o directory contenente.png, ma non necessariamente termina per .png. (Non ho indagato se è possibile utilizzare in modo intelligente i caratteri jolly o le espressioni regolari). Non gestisce il tuo particolare esempio (per il quale hai già una buona risposta) ma ha risolto il mio problema, e questa pagina è quella che ho trovato quando ho cercato su Google una soluzione :)

Problemi correlati