2014-02-06 4 views
2

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

Я надеюсь, что этот пример clatifies задачу:

  1. Для следующей исходной папки:

    --Logs 
    ----Application 
    ------Service 
    --------Log1.txt 
    --------Log2.txt 
    ------WebSite 
    --------Log1.txt 
    --------Log2.txt 
    
  2. Папка назначения должна быть создана следующим образом:

    --Logs 
    ----Application 
    ------Service 
    --------Machine1 
    ----------Log1.txt 
    ----------Log2.txt 
    ------WebSite 
    --------Machine1 
    ----------Log1.txt 
    ----------Log2.txt 
    

Как видите на нижнем уровне были созданы подпапки Machine1. Можете ли вы привести пример сценария PowerShell, который выполняет это?

Я исследовал входные параметры в команде ROBOCOPY. Кажется, это не позволяет сделать это прямолинейно.

Кроме того, я знаю, что я могу четко перебирать всю структуру папок, создавать необходимые подпапки и копировать файлы в каждую подпапку. Но это, кажется, слишком длинный путь. Поэтому я хочу знать, не хватает ли чего-нибудь. Возможно, есть более умный способ сделать это.

+0

Какую версию Powershell вы работаете? – mjolinor

+0

@mjolinor version 2.0 – Egor4eg

ответ

3

Я бы предложил использовать robocopy для репликации содержимого подпапок:

$srcBase = 'C:\some\Logs\Application' 
$dstBase = 'D:\other\Logs\Application' 

Get-ChildItem $srcBase | ? { $_.PSIsContainer } | % { 
    $dst = "$dstBase\$($_.Name)\Machine1" 

    & robocopy $_.FullName $dst /e 
} 
+1

Этот не создает одну и ту же структуру папок в пункте назначения. Фактически, он создает все подпапки непосредственно внутри корневой папки. Но мне нужно дерево точно так же, как в источнике (см. Пример в моем вопросе) – Egor4eg

+0

@ Egor4eg Он работал отлично, когда я его тестировал. Обратите внимание, что вам нужно включить общие родительские папки ('Logs \ Application') в' $ dstBase'. Если он по-прежнему не работает для вас, обновите свой вопрос с помощью кода, который вы используете в настоящее время. –

+0

Да, вы правы. Это будет работать на моем примере. Я забыл упомянуть, что возможны несколько «приложений». Извини за это. В любом случае я уже написал сценарий, и ваш комментарий был полезен. Отмечая это как ответ ... – Egor4eg

Смежные вопросы