2016-07-13 19 views
0

監視フォルダ内の4つのフォルダのいずれかにファイルをドロップし、ドロップされたフォルダに基づいて2つのフォルダにファイルをコピーするスクリプトが必要です。条件付きで複数のフォルダから複数のフォルダにファイルをコピー

監視フォルダ:C:ユーザー名\デスクトップ\ PS DROP FOLDERS \ \ユーザー

C:ユーザー名\デスクトップ\ PS DROP FOLDERS \ \ \ユーザー18x23
Cにコピー:\ Users \ユーザーユーザー名\デスクトップ\ IJET RIP FOLDERS \ LARGE 18x23
C:\ Users \ Username \ Desktop \ STE RIP - HR FOLDERS \ LARGE 16x20-18x23にコピーします。

C:ユーザー名\デスクトップ\ IJET RIPフォルダがCにLARGE 16x20
コピー\ \ \ユーザー:ユーザー名\デスクトップ\ PS DROPフォルダ\ \ユーザーがCにLARGE
コピーを\ \ユーザー\ユーザー名\デスクトップ\ STEのRIP - HRフォルダはLARGE 16x20-18x23

C:\ユーザー名\デスクトップ\ PSのDROPフォルダ\ \ Users \ユーザーマニュアルCへ
コピー:ユーザー名\デスクトップ\ IJET RIP FOLDERS \マニュアル\ \ユーザーを15×15
C:\ Users \ Username \ Desktop \ STE RIP - HRフォルダ\マニュアル15x15

C:\ Users \ Usernam Cへの電子\デスクトップ\ PS DROP FOLDERS \ SMALL
コピー:Cへのユーザー名\デスクトップ\ IJET RIP FOLDERS \ SMALL \ \ユーザー16x20
はコピー:ユーザー名\デスクトップ\のSTEのRIP \ \ユーザー - HR FOLDERS \ SMALL 16x20

以下は、監視フォルダの部分(別のQ/Aから取得)のコードですが、条件付きで複数のフォルダにコピーするロジックを把握することはできません。 IF文よりはるかに良い方法があるようです。

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO 
$watcher = New-Object System.IO.FileSystemWatcher 
$watcher.Path = "C:\Users\Username\Desktop\PS DROP FOLDERS" 
$watcher.Filter = "*.ps" 
$watcher.IncludeSubdirectories = $true 
$watcher.EnableRaisingEvents = $true 

### DEFINE ACTIONS AFTER A EVENT IS DETECTED 
$action = { 

HELP INQUIRY CODE HERE 

} 
### DECIDE WHICH EVENTS SHOULD BE WATCHED + SET CHECK FREQUENCY 
$created = Register-ObjectEvent $watcher "Created" -Action $action 
### $changed = Register-ObjectEvent $watcher "Changed" -Action $action 
### $deleted = Register-ObjectEvent $watcher "Deleted" -Action $action 
### $renamed = Register-ObjectEvent $watcher "Renamed" -Action $action 
while ($true) {sleep 5} 

申し訳ありませんが、スキルが不足しています。私は解決策を期待していませんが、いくつかの指針はうまくいくでしょう。ありがとうございました。

P.S.これは、2つの異なるイメージングシステム用のRIPプログラムのホットフォルダにファイルをルーティングするためです。

+0

これは良い開始テンプレートのように見えますが、これまでに何を試しましたか? – Taegost

+0

'Get-Help about_Switch'を実行し、' Switch'コマンドを使ってケースとアクションを定義することをお勧めします。次に、 '{(split-path $ _。directory-leaf)-eq '18x23'} {$ _ |コピーアイテム 'C:\ PathA'; $ _ |コピーアイテム 'C:\ PathB '} ' – TheMadTechnician

+0

ありがとうございました!あなたは本当に正しい方向に私を指摘しました。以下の作業コード。 –

答えて

0

私はテクニシャンのおかげで、switchコマンドを使って解決策を考え出しました。これが他の人にも役立つことを願っています。

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO 
    $watcher = New-Object System.IO.FileSystemWatcher 
    $watcher.Path = "C:\Users\Username\Desktop\PS DROP FOLDERS" 
    $watcher.Filter = "*.ps" 
    $watcher.IncludeSubdirectories = $true 
    $watcher.EnableRaisingEvents = $true 

### DEFINE ACTIONS AFTER A EVENT IS DETECTED 
     $action = { 
        #GET NAME OF PARENT DIRECTORY FOR SWITCH AND OUTPUT VALUES IN CONSOLE 
        $item = $Event.SourceEventArgs.FullPath 
        $path = Split-Path (Split-Path $item -Parent) -leaf 
        Write-Host "item : " $item 
        Write-Host "path : " $path 

     switch ($path) 
    { 
     "LARGE" { 
        $destination = @("C:\Users\Username\Desktop\IJET RIP FOLDERS\LARGE 16x20","C:\Users\Username\Desktop\STE RIP - HR FOLDERS\LARGE 16x20-18x23") 

        foreach ($dir in $destination) 
        { 
        Copy-Item -Path $item -Destination $dir 
        } 
       } 
     "SMALL" { 
        $destination = @("C:\Users\Username\Desktop\IJET RIP FOLDERS\SMALL 16x20","C:\Users\Username\Desktop\STE RIP - HR FOLDERS\SMALL 16x20") 

        foreach ($dir in $destination) 
        { 
        Copy-Item -Path $item -Destination $dir 
        } 
       } 
     "MANUAL" { 
        $destination = @("C:\Users\Username\Desktop\IJET RIP FOLDERS\MANUAL 15x15","C:\Users\Username\Desktop\STE RIP - HR FOLDERS\MANUAL 15x15") 

        foreach ($dir in $destination) 
        { 
        Copy-Item -Path $item -Destination $dir 
        } 
       } 
     "18x23" { 
        $destination = @("C:\Users\Username\Desktop\IJET RIP FOLDERS\LARGE 18x23","C:\Users\Username\Desktop\STE RIP - HR FOLDERS\LARGE 16x20-18x23") 

        foreach ($dir in $destination) 
        { 
        Copy-Item -Path $item -Destination $dir 
       } 
       } 
      } 
      } 
### DECIDE WHICH EVENTS SHOULD BE WATCHED + SET CHECK FREQUENCY 
    $created = Register-ObjectEvent $watcher "Created" -Action $action 
### $changed = Register-ObjectEvent $watcher "Changed" -Action $action 
### $deleted = Register-ObjectEvent $watcher "Deleted" -Action $action 
### $renamed = Register-ObjectEvent $watcher "Renamed" -Action $action 
    while ($true) {sleep 5} 
関連する問題