2013-04-27 162 views
0

我試圖監視一個目錄及其新文件的子目錄。我想查看文件擴展名,並根據文件擴展名將其移至相應的文件夾。例如,如果我有一個文件夾「C:\ users \ dave \ desktop \ test」,並且我下載了一個avi文件到該文件夾​​,就像腳本一樣查看它並自動將文件移動到C:\ movies。或者,如果我下載一個完整的mp3文件文件夾,我希望它自動將整個文件夾移動到C:\ music。現在它只將mp3文件移動到C:\ music中,但我無法弄清楚如何移動父文件夾。文件組織PowerShell腳本

以下是我迄今寫過的內容:請記住,我是PowerShell新手!

if (!(Test-Path -path C:\music)) 
{ 
    New-Item C:\music\ -type directory 
} 
if (!(Test-Path -path C:\movies)) 

{ 
    New-Item C:\movies\ -type directory 
} 


$PickupDirectory = Get-ChildItem -recurse -Path "C:\users\Dave\desktop\test" 
$folder = 'C:\users\Dave\desktop\test' 
$watcher = New-Object System.IO.FileSystemWatcher $folder 
$watcher.IncludeSubdirectories = $true 
$watcher.EnableRaisingEvents = $true 
$watcher 



Register-ObjectEvent $watcher -EventName Changed -SourceIdentifier 'Watcher' -Action { 




foreach ($file in $PickupDirectory) 
{ 
    if ($file.Extension.Equals('.avi')) 
    { 

     Write-Host $file.FullName #Output file fullname to screen 
     Write-Host $Destination #Output Full Destination path to screen 

    move-Item $file.FullName -destination c:\movies 
} 

if ($file.Extension.Equals('.mp3')) 
    { 

    Write-Host $file.FullName #Output file fullname to screen 
    Write-Host $Destination #Output Full Destination path to screen 

    move-Item $file.FullName -destination c:\music 
} 


if ($file.Extension.Equals(".mp4")) 
    { 

    Write-Host $file.FullName #Output file fullname to screen 
    Write-Host $Destination #Output Full Destination path to screen 

    move-Item $file.FullName -destination c:\movies 
} 
} 
} 
} 

出於某種原因,它不移動文件。我得到它看到的變化,但不移動文件。

請幫忙!

+0

退房這個程序 - [DropIt(http://dropit.sourceforge.net)做這個。 – 2013-04-27 11:58:41

+0

謝謝安迪,但是,我必須創建這個作業。我的編程知識已經讓我走了這麼遠,但是我缺乏腳本知識卻使我停下腳步。 – OOoNiMrOdoOO 2013-04-27 13:43:21

回答

0

事件的Action腳本塊在不同的運行空間中運行,並且主腳本中的變量在此處不可見。

嘗試移動這一行:

$PickupDirectory = Get-ChildItem -recurse -Path "C:\users\Dave\desktop\test" 

到動作腳本塊,看看有沒有什麼幫助。

我還想交換一堆Switch的If語句,但這只是個人喜好。

的一種方式補充說,父路徑

$parent = ($file.fullname).split('\')[-2] 
[void][IO.Directory]::CreateDirectory("c:\music\$parent") 
move-Item $file.FullName -destination c:\music\$parent 
+0

太棒了!感謝mjolinor!任何想法如何讓父目錄隨它移動?所以我沒有一個混合的MP3文件一堆文件夾? – OOoNiMrOdoOO 2013-04-27 16:01:20

+0

已更新的答案。 – mjolinor 2013-04-27 16:26:22

+0

嗯,我剛剛結束了一個以父文件夾命名的黑色文件。它使用文件夾名稱而不是文件夾創建了一個文件。 – OOoNiMrOdoOO 2013-04-27 16:47:21