2013-12-13 2 views
2

Я использую powershell 3. Необходимо следить за папкой, если есть файлы изображений, переместить их в папку antoher.powershell, как сфокусировать каталог и переместить файлы в другую папку

вот мой код, я проверяю его, его не работает, не могу понять, что нужно исправлять.

#<BEGIN_SCRIPT># 

#<Set Path to be monitored># 
$searchPath = "F:\download\temp" 
$torrentFolderPath = "Z:\" 

#<Set Watch routine># 
$watcher = New-Object System.IO.FileSystemWatcher 
$watcher.Path = $searchPath 
$watcher.IncludeSubdirectories = $false 
$watcher.EnableRaisingEvents = $true 


$created = Register-ObjectEvent $watcher "Created" -Action { 
    Copy-Item -Path $searchPath -Filter *.jpg -Destination $torrentFolderPath –Recurse 
} 


#<END_SCRIPT># 

UPDATE:

Я получил это частично работает. все еще остается одна проблема. позволяет начать с пустой папки. Я загружаю изображение (1.jpg) в папку, ничто не перемещается в Z: диск. затем загрузите другое изображение (2.jpg) в папку. 1.jpg будет перемещен в Z: диск. похоже, что вновь созданный никогда не переезжает.

$folder = "F:\\download\\temp" 
$dest = "Z:\\" 
$filter = "*.jpg" 

$fsw = new-object System.IO.FileSystemWatcher $folder, $filter -Property @{ 
    IncludeSubDirectories=$false 
    NotifyFilter = [System.IO.NotifyFilters]'FileName, LastWrite' 
} 

$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { 

    Move-Item -Path F:\download\temp\*.jpg Z:\ 
} 

ответ

2

Вы еще не зарегистрированы NotifyFilter. Вот почему ваш код не работает.

здесь образец, который регистрирует NotifyFilter и выводит информацию о файле, который был создан

$folder = "c:\\temp" 
$filter = "*.txt" 

$fsw = new-object System.IO.FileSystemWatcher $folder, $filter -Property @{ 
    IncludeSubDirectories=$false 
    NotifyFilter = [System.IO.NotifyFilters]'FileName, LastWrite' 
} 

$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { 
    $path = $Event.SourceEventArgs.FullPath 
    $name = $Event.SourceVentArgs.Name 
    $changeType = $Event.SourceEventArgs.ChangeType 
    $timeStamp = $Event.TimeGenerated 

    Write-Host $path 
    Write-Host $name 
    Write-Host $changeType 
    Write-Host $timeStamp 
} 
+0

поблагодарить вас знает, не так много, я получил его частично работая сейчас, по-прежнему нужна помощь. см. мои обновления. – qinking126

0

скриптов событий выполняются в отдельном объеме, который имеет доступ только к глобальным переменным, поэтому в зависимости от реализации у вас есть есть проблемы, пытающиеся использовать эти переменные в скрипте действия. (! Плохой харизмы) Один из способов, не прибегая к объявлению глобальных переменных является использование расширяемой строки для создания блок сценария с переменным расширением, прежде чем зарегистрировать событие:

$ActionScript = 
[Scriptblock]::Create("Copy-Item -Path $searchPath -Filter *.jpg -Destination $torrentFolderPath –Recurse") 

$created = Register-ObjectEvent $watcher "Created" -Action $ActionScript 
Смежные вопросы