2016-05-27 3 views
0

Я пытаюсь создать скрипт, главной задачей которого является выполнение нескольких команд PS при каждом добавлении файла в папку. Я связал с помощью «do», который войдет в программу в цикле. Но когда я добавляю файл в папку, команды выполняются только один раз, а затем я получаю ошибки для вновь добавленных файлов. Ниже приведен образец моего кода Есть ли у вас какие-либо идеи, как я могу это сделать? Спасибо заранее!Выполнять команды PS каждый раз, когда файл добавляется в папку

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

быть более конкретным: что вы подразумеваете под «добавлением файла в каталог»? Вы имеете в виду, что количество файлов будет расти? Или общее количество файлов не нужно увеличивать (просто замена файла для другого - «добавление»)? Также: происходит смена имени файла 'add'? Изменяет ли содержимое файла «добавление»? –

ответ

0

Вы ищете FileSystemWatcher вместе с Register-ObjectEvent, чтобы получить уведомление, когда добавляется файл:

$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 
} 

Чтобы отменить регистрацию событий, использование:

Unregister-Event -SourceIdentifier FileCreated 
Смежные вопросы