2013-05-29 16 views
6

Uso Windows 8 pro e voglio fare qualcosa che spero sia molto semplice. Voglio solo eseguire un programma contro tutti i file di un certo tipo in una directory. niente alberi, solo nella directory piatta. In Linux lo farei:Come utilizzare Powershell per eseguire un programma su tutti i file in una directory

find . -name 'exec c:\user\local\bin\myprog {} \; 

ho letteralmente trascorrere un paio d'ore alle prese con le coperture di potenza, corsa nella politica problemi, permessi, ecc C'è un modo semplice che posso fare questo accadere?

+0

hai provato il cmdlet 'get-childItem'? Ha un flag 'Exec \t Esegui cmdlet nell'argomento specificato. Potrebbe essere utile - http://windows-powershell-scripts.blogspot.com/2009/08/unix-linux-find-equivalent-in.html – Bill

risposta

14

Questo è facile, ma diverso rispetto all'utilizzo di find esempio:

Get-ChildItem -File | Foreach {c:\user\local\bin\myprog $_.fullname} 

Per fare cose nella riga di comando, gli alias può rendere questo un po 'più concisa:

ls -file | % {c:\user\local\bin\myprog $_.fullname} 

PowerShell preferisce comandi che sono ristretto, ma che può essere composto insieme in una pipeline per fornire molte capacità. Inoltre, PowerShell esegue il pipe su oggetti .NET ad es. Get-ChildItem pipe Oggetti System.IO.FileInfo. È quindi possibile utilizzare comandi come Foreach, Where, Select, Sort, Group, Format per manipolare gli oggetti passati lungo la pipeline. Se hai tempo, ti consiglio di controllare il mio ebook gratuito Effective PowerShell.

+0

grazie Keith, ho avuto il comando ls -l .. per funzionare. Presumo di digitare "powershell" al prompt di DOS prima, quindi incollare il comando ls -file nella finestra del prompt dos? C'è un modo più diretto per eseguirlo? inoltre, come posso ottenere il comando eseguito per echo. altrimenti, non posso dire quale sia l'output da quale esecuzione. grazie ancora. –

+0

È meglio avviare un prompt di PowerShell, quindi non è necessario digitare "powershell". I comandi vengono automaticamente inviati alla console a meno che non si reindirizzi a un file (o $ null) o si acquisisca l'output in una variabile. –

+0

Più uno per il grande ebook gratuito. – digaomatias

0

Prova questo. Cambia dir a quella directory da:

cd \path\to\directory\with\files 

programma eseguito su tutti i file in una directory:

c:\user\local\bin\myprog *.type 

Spero di avere la domanda giusta.

+1

Funzionerà solo se 'myprog' accetta i caratteri jolly. Non è equivalente al comando Linux nell'esempio dell'OP. –

Problemi correlati