Поиск подкаталогов с помощью robocopy

Я написал быстрый скрипт robocopy для поиска в каталоге и перемещения видеофайлов, которые соответствуют определенным критериям (размер, имя, расширение). Он отлично работает, за исключением того, что он не будет искать подкаталоги. Я попробовал флаг /s, но он перемещается по всему каталогу. Мне нужны только файлы в этих каталогах. Есть ли простой способ подключить часть robocopy к Get-Child или циклу в powershell? Спасибо!

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

person Sam    schedule 10.11.2015    source источник


Ответы (1)


Самый простой способ, который я могу придумать, - это создать для него функцию. Это должно делать то, что вы хотите:

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"

Это позволяет вам передать файловый объект прямо в него и указать место назначения и любые параметры, которые вы хотите.

person TheMadTechnician    schedule 11.11.2015
comment
Эта новая функция работала в папке «psTesting», но когда я запускал ее на сетевом диске «X:*», она больше не искала подкаталоги. Странный. Может ли быть проблема с разрешениями? - person Sam; 11.11.2015
comment
Вы используете X:* или X:\*? Я не уверен, имеет ли это значение, но обычно буква диска-двоеточие относится к текущей папке на этом диске, а буква диска-двоеточие-обратная косая черта относится к корню указанного диска. - person TheMadTechnician; 11.11.2015