2015-11-10 47 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