2016-05-27 15 views
0

Ich versuche ein Skript zu erstellen, dessen Hauptaufgabe darin besteht, jedes Mal, wenn eine Datei einem Ordner hinzugefügt wird, ein paar PS-Befehle auszuführen. Ich habe mit "do" gebunden, die das Programm in einer Schleife eingeben wird. Aber wenn ich eine Datei in den Ordner lege, werden die Befehle nur einmal ausgeführt und dann bekomme ich Fehler für die neu hinzugefügten Dateien. Unten ist ein Beispiel meines Codes Haben Sie eine Idee, wie kann ich das tun? Vielen Dank im Voraus!PS-Befehle jedes Mal ausführen, wenn eine Datei einem Ordner hinzugefügt wird

do{ 
Dir *.txt | rename-item -newname { [io.path]::ChangeExtension($_.name, "eml")} 
Invoke-Item C:\Users\*.eml 
Remove-Item C:\Users\*.eml 
} until ("condition that is never met") 
+0

Seien Sie präziser: Was meinst du mit "eine Datei zu einem Verzeichnis hinzufügen"? Meinst du, dass die Anzahl der Dateien wächst? Oder die Gesamtzahl der Dateien muss nicht wachsen (nur eine Datei gegen eine andere austauschen, heißt "hinzufügen")? Außerdem: ändert sich der Dateiname beim Hinzufügen? Wird der Dateiinhalt beim Hinzufügen geändert? –

Antwort

0

Wenn Sie ein FileSystemWatcher zusammen mit Register-ObjectEvent suchen benachrichtigt werden, wenn eine Datei hinzugefügt:

$folder = 'c:\test' 
$filter = '*.txt' 
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{ IncludeSubdirectories = $true} 

$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { 
    $path = $Event.SourceEventArgs.FullPath 
    # A file has been added, run your ps commands here. e. g. 
    write-host $path 
} 

die Veranstaltung, Verwendung Aufheben der Registrierung:

Unregister-Event -SourceIdentifier FileCreated