2015-11-10 49 views
1

我編寫了一個快速robocopy腳本來搜索目錄並移動符合特定條件(大小,名稱,擴展名)的視頻文件。除了不會搜索子目錄外,它工作得很好。我嘗試了/ s標誌,但是它移動了整個目錄。我只想要這些目錄中的文件。是否有一種簡單的方法將robocopy部分插入到Power-Child中的Get-Child或循環中?謝謝!使用robocopy搜索子目錄

robocopy C:\psTesting\sourceDrive\ C:\psTesting\movieFolder\ *.mp4 *.avi *.mkv /min:600000000 /mov /np 

回答

3

我能想到的最簡單的方法就是爲它製作一個功能。這應該做你想做的:

Function PSRoboCopy{ 
[cmdletbinding()] 
Param(
    [Parameter(Mandatory=$true,ValueFromPipelinebyPropertyName=$True)] 
    [Alias('SourceFile')] 
    [String[]]$FullName, 
    [string]$Destination, 
    [string]$Options 
) 
Process{ 
    $FileIn = Split-Path $FullName -Leaf 
    $FolderIn = Split-Path $FullName 
    & robocopy $FolderIn $Destination $FileIn $Options 
} 
} 

Get-ChildItem 'C:\psTesting\sourceDrive\*' -Include '*.mp4','*.avi','*.mkv' -Recurse | Where{$_.length -gt 600000000} | PSRoboCopy -Destination 'C:\psTesting\movieFolder\' -Options "/mov /np" 

這可以讓你管一個文件對象直接進入它,並指定你的目的地和任何你想要的選項。

+0

這個新函數在'psTesting'文件夾中工作,但是當我在網絡驅動器'X:\ *'上運行它時,它不再搜索子目錄。奇怪。它可能是一個權限問題? – Sam

+0

你使用'X:*'還是'X:\ *'?我不確定它是否有所作爲,但通常driveletter-colon指的是該驅動器上的當前文件夾,而driveletter-colon-backslash指向指定驅動器的根目錄。 – TheMadTechnician