2014-08-28 3 views
2

Извините, если это действительно простой процесс.Noob to PowerShell, копирование файлов в папке

У меня есть структура папок с ~ 4000 каталогов на уровне корня (пустая) и другое место с другим набором папок с данными.

Я хочу скопировать только файлы из папок в location2 в папки в location1, то есть \ FolderABC123 \ Archive, но только если имена каталогов совпадают. Я уверен, что копия проводника Windows или xcopy или какая-либо другая утилита могут сделать это с большей легкостью, но я хотел бы получить голову в PowerShell и подумать, что это будет хороший старт?

спасибо. Chris

+0

Что вы сделали до сих пор. Пожалуйста, уточните – Nabin

ответ

0
# Fist, get a list of all target directories (i.e.: directories under $destination that have a match in $source) 

    $targetDirs = dir -Path $source -Recurse -Force | 
     ?{ $_.psIsContainer } | 
     %{ $_.FullName -replace [regex]::Escape($source), $destination } | 
     %{ if (Test-Path $_) { $_ }} 

    # Then, enumerate all files from source and copy them only if the corresponding target dir exists 

    dir -Path $source -Recurse -Force | 
     ?{ -not $_.psIsContainer } | 
     ?{ Test-Path (Split-Path ($_.FullName -replace [regex]::Escape($source), $destination) -Parent) } | 
     copy -Force -Destination { $_.FullName -replace [regex]::Escape($source), $destination } 
+0

спасибо за помощь, ребята, очень ценятся. Сегодня это принесет. – jembsb

+0

Дэвид, спасибо за советы, я смог заставить это работать! Чтобы сделать это дальше, у меня есть вложенная папка в папке назначения, как я могу выбрать ее как папку для копирования элементов? и как мне приступить к написанию файла log/csv для записи того, что было написано там, где размер и т. д.? – jembsb

0

Вы можете использовать powershell.
Установить путь в начале.

$strSouce = "Path" 
$strDestination = "Path" 

Затем найдите файл Еогеасп в источнике.

Foreach ($objFile in Get-ChildItem -Path $strSouce -Recurse | Where-Object -FilterScript {$_.PsIsCointainer -eq $false}) {] 

Скопируйте каждый элемент из источника в пункт назначения. Для места назначения вам нужно заменить исходный путь на путь дезинтезиантности.

Copy-Item -Path $objFile.FullName -Destination $objFile.FullName.Replace("$strSouce", "$strDestination") 


Для вашего обучения, установить фрагмент в нужное место.

+0

спасибо кучам Патрика. Мне не удалось заставить этот код работать. Помимо нескольких опечаток, которые я обнаружил, я все еще не мог этого добиться. В конце концов, это произошло без ошибок, но я не смог получить копию. Переменная $ objFile всегда была пустой? – jembsb

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