0

新しいファイルのディレクトリとそのサブディレクトリを監視しようとしています。ファイル拡張子を確認し、ファイル拡張子に基づいて適切なフォルダーに移動したいと考えています。たとえば、「C:\users\dave\desktop\test」というフォルダーがあり、そのフォルダーに avi ファイルをダウンロードした場合、スクリプトのようにそれを確認し、ファイルを C:\movies に自動的に移動します。または、mp3 ファイルのフォルダー全体をダウンロードする場合、そのフォルダー全体を自動的に C:\music に移動したいと思います。現在、mp3 ファイルのみを C:\music に移動していますが、親フォルダーも移動する方法がわかりません。

これまでに書いたことは次のとおりです。覚えておいてください、私は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
}
}
}
}

何らかの理由で、ファイルを移動しません。変更を確認することはできましたが、ファイルを移動することはできませんでした。

助けてください!

4

1 に答える 1

0

イベントの Action scripblock は別の実行空間で実行され、メイン スクリプトの変数はそこには表示されません。

この行を移動してみてください:

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

アクションスクリプトブロックに追加して、それが役立つかどうかを確認してください。

その If ステートメントのスタックを Switch と交換することもできますが、それは個人的な好みにすぎません。

その親パスを追加する 1 つの方法

 $parent = ($file.fullname).split('\')[-2]
 [void][IO.Directory]::CreateDirectory("c:\music\$parent")
 move-Item $file.FullName -destination c:\music\$parent
于 2013-04-27T15:43:04.877 に答える