2013-05-29 6 views
6

Ich benutze Windows 8 Pro und möchte etwas tun, ich hoffe, ist sehr einfach. Ich möchte nur ein Programm gegen alle Dateien eines bestimmten Typs in einem Verzeichnis ausführen. keine Bäume, nur im flachen Verzeichnis. In Linux würde ich:Wie Powershell zu einem Programm gegen alle Dateien in einem Verzeichnis ausführen

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

Ich habe buchstäblich ein paar Stunden verbringen mit Power Shell-Ringen, Laufen in politische Probleme, Berechtigungen usw. Gibt es eine einfache Weise, die ich passieren kann dies?

+0

Haben Sie das Cmdlet "get-childItem" versucht? Es hat ein Flag 'Exec \t Execute Cmdlets im angegebenen Argument.' Dies kann nützlich sein - http://windows-powershell-scripts.blogspot.com/2009/08/unix-linux-find-equivalent-in.html – Bill

Antwort

14

Dies ist einfach, aber anders als die Verwendung von find zB:

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

Für Sachen in der Befehlszeile tun, kann Aliase macht dies ein wenig mehr terse:

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

Powershell zieht es Befehle, die eng im Fokus, aber das kann zusammen in einer Pipeline zusammengestellt werden, um viele Fähigkeiten zu bieten. Außerdem pumpt PowerShell .NET-Objekte, z. Get-ChildItem pumpt System.IO.FileInfo-Objekte. Sie können dann Befehle wie Foreach, Where, Select, Sort, Group, Format verwenden, um die über die Pipeline übergebenen Objekte zu bearbeiten. Wenn Sie Zeit haben, empfehle ich Ihnen mein kostenloses Ebook Effective PowerShell.

+0

Danke Keith, ich habe den Befehl ls -l .. zu arbeiten. Ich nehme an, ich gebe "Powershell" zuerst an der DOS-Eingabeaufforderung ein, dann fügen Sie den Befehl ls -file in das DOS-Eingabeaufforderungsfenster ein? Gibt es einen direkteren Weg, es auszuführen? Außerdem, wie kann ich den Befehl zum Echo bekommen. Ansonsten kann ich nicht sagen, was die Ausgabe von welcher Ausführung ist. Danke noch einmal. –

+0

Besser, um eine PowerShell-Eingabeaufforderung zu starten, müssen Sie nicht "Powershell" eingeben. Befehle werden automatisch an die Konsole ausgegeben, wenn Sie nicht zu einer Datei (oder $ null) umleiten oder ihre Ausgabe in einer Variablen erfassen. –

+0

Plus eins für das große kostenlose E-Book. – digaomatias

0

Versuchen Sie es. Ändern Sie dir in das Verzeichnis von:

cd \path\to\directory\with\files 

Run Programm gegen alle Dateien in einem Verzeichnis:

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

Hoffe, dass ich die Frage richtig zu machen.

+1

Dies funktioniert nur, wenn 'myprog' Wildcards akzeptiert. Dies entspricht nicht dem Linux-Befehl im Beispiel des OP. –

Verwandte Themen