Eliminazione di tutti i file che non corrispondono a un determinato modello: riga di comando di Windows


12

L'eliminazione di elementi tramite la riga di comando è piuttosto semplice.

del /options filename.extension

Supponiamo ora di voler eliminare tutti i file che non finiscono con .jpg in una cartella, come farei.

Il fatto è che ho un software che converte tutte le immagini specificate in .jpg, ma lascia gli originali, che non mi servono più.

Sarebbe molto più efficiente eseguire una singola istruzione, rispetto a fare più istruzioni per ogni diverso tipo di file.

Risposte:


14

Lo farei così:

attrib +r *.jpg
del /q *
attrib -r *.jpg

Questo prima renderà tutti i file JPG di sola lettura, eliminerà tutto il resto (salterà automaticamente i file di sola lettura), quindi renderà nuovamente scrivibili i file JPG.


Ha funzionato come un campione. Nota: basta aggiungere /sa ciascuna riga per includere ricorsivamente i file nelle sottodirectory.
Chuck Wilbur,

9

In realtà è abbastanza facile.

Dovrai forscorrere i file e quindi cercare l'estensione:

for %f in (*) do if not %~xf==.jpg del "%f"

dovrebbe fare il trucco (codice qui ).


grazie, ma da solo dipende da quale mappa sto usando.
KdgDev,

4
Carta geografica?
Joey,

Come posso dire se non .jpg e non .jsp e non .xml quindi del?
user1164061

1

Powershell in soccorso
In tempi di Windows 7/8 è il successore della buona vecchia riga di comando

Del C:\myFolder\* -exclude '*.jpg'

Delè un alias per Remove-Item. Ha diverse opzioni come recurse, include, exclude e filter (usa questo per RegEx)

Devi aggiungere \*per includere i file in una determinata cartella


Dal prompt CMD, questo dovrebbe funzionare:PowerShell.exe -Command "&{Remove-Item C:\MyFolder\* -Exclude '*.jpg'}"
Iszi,

Nota: PowerShell viene fornito con Win 7/8. Per Windows XP o Vista, è necessario scaricarlo e installarlo.
Iszi,

1

So che non risponde direttamente alla tua domanda, ma hai esaminato le opzioni sul tuo convertitore per vedere se:

  1. Può eliminare gli originali stessi

o

  1. Scrivi i .jpg in una nuova cartella?

Non ho l'opzione diretta per farlo. Quello che farà è sovrascrivere l'originale se all'inizio era un JPG. Ma tutti gli altri rimangono sul disco mentre viene creato un JPG.
KdgDev,

@WebDevHobo - oh bene, andrei con il suggerimento di Johannes allora.
ChrisF,

0

Stavo cercando un modo per trovare tutti i file che NON avevano l'estensione ".mp3" in una directory TREE su Windows 7 (volume NTFS) contenente forse 20.000 file in diverse centinaia di directory di varie profondità ... quindi dopo un po 'di angoscia, ho usato:

cd <theplace>
dir /S | find /V "<DIR>" | find /V "Total" | find /V "bytes" | find /V "Directory" | find /V "Volume" | find /V ".mp3" | more /S

questo elencava i file che non corrispondevano al .mp3 dopo aver eliminato tutto ciò che era correlato all'output del comando DIR ... 99% funziona ... a meno che il file che non corrisponde sia nominato una delle parole chiave nell'output DIR standard - forse c'è un modo per fare in modo che DIR riferisca meno informazioni di intestazione / riepilogo - ma non mi sono preoccupato perché questo ha ottenuto la maggior parte del percorso.


a quanto pare il codice di pubblicazione qui elimina alcuni caratteri speciali ... quindi il comando "cd" sopra era su una riga da solo e specificava la directory principale di destinazione, e il primo comando "trova" rimosse tutte le righe che contenevano "<" DIR "> "(vai alla figura) poiché questo è l'output del comando dir - ma il codice postale qui potrebbe pensare che sia una sorta di meta-istruzione e lo spoglia ...
CaptPat,

1
C'è un modo molto più semplice per farlo: la /bbandiera del dircomando. dir /belencherà i nomi dei file e le estensioni solo nella directory corrente, dir /s /belencherà i nomi completi di tutti i file nella sottodirectory corrente e in tutte le directory. Piping find /vinvece di un forloop è un bel tocco che dovrò ricordare, ma non credo che funzioni del.
Bob,

0

Un altro modo per eliminare tutti i file corrispondenti a un nome file è mostrato sotto. L'elenco del ciclo for è composto da tutti i file e if NOT corrisponde al nome file (senza nome directory).

for /r %f in (*) do if not %~nxf == abc.xml del "%f"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.