2013-06-07 5 views
5

Attualmente sto eseguendo uno script PowerShell (v3.0), uno dei quali è quello di recuperare tutti i file HTML in una directory. Che le grandi opere:Come posso utilizzare il parametro -filter di PowerShell per escludere valori/file?

$srcfiles = Get-ChildItem $srcPath -filter "*.htm*"

Tuttavia, ora sono di fronte a dover individuare tutti i file non HTML ... CSS, Word ed Excel documenti, immagini, ecc

voglio qualcosa che funzionerebbe come il parametro -ne insieme al parametro -filter. In sostanza, dammi tutto ciò che è non"*.htm*"

-filter -ne non funziona, ho provato -!filter per un capriccio, e io non riesco a trovare nulla in PowerShell doc su MSDN per negate il parametro -filter. Forse ho bisogno di tubare qualcosa ...?

Qualcuno ha una soluzione per questo?

risposta

5

-Filter non è la strada giusta. Utilizzare il parametro -exclude invece:

$srcfiles = Get-ChildItem $srcPath -exclude *.htm* 

-exclude accetta un tipo string[] come input. In questo modo è possibile escludere più di un tipo di estensione/file come segue:

$srcfiles = Get-ChildItem $srcPath -exclude *.htm*,*.css,*.doc*,*.xls* 

.. E così via.

+0

sì, con un piccolo avviso che l'aggiunta di -exclude può effettivamente ** modificare la struttura di output **. Ho avuto "Get-ChildItem -Path" * .Tests "-Directory" per afferrare tutte le directory che terminavano con "Test", e si è comportato come previsto: restituito 1 gruppo con pochi elementi essendo xx.Tests directory stesse .. Quando I aggiunto '-Exclude 'Common. *'', quindi invece di escludere "Common.Tests", ha fatto qualcosa di strano come restituire alcuni gruppi con contenuti di xxx.Tests directory all'interno di ciascuno .. – quetzalcoatl

4

Sono un po 'più recente di PowerShell, ma potresti passare al comando where?

$srcfiles = Get-ChildItem $srcPath | where-object {$_.extension -ne "*.htm*"} 

Non sono sicuro di quale sia la proprietà effettiva che si utilizzerà in "estensione".

+0

Sei sicuro che il globbing funzioni in '- ne'? Ho appena provato a filtrare le directory con '$ _. Name -ne 'Common. *'' E non ha funzionato del tutto. Ha funzionato solo quando ho passato il nome completo come '$ _. Nome -ne 'Common.Tests'' – quetzalcoatl

Problemi correlati