Войти

Показать полную графическую версию : Построчное копирование папок, с сохранением структуры или копирования из файла - Powe


morgan-12l1
16-07-2018, 21:22
Добрый вечер.

1 вопрос:
Подскажите пожалуйста, как можно произвести копирование каталогов с определенным вложением (содержимым определенным, например JPG). Если в папке есть данный формат, то скопировать данные файлы из этой папки в папку которую назначу, с сохранением структуры. расширений может быть несколько.

2 вопрос:
Например, я получил список всех подпапок, например:
D:\test\1
D:\test\2
D:\test\4\1\
D:\test\4\2\2\1
B этих папках есть файлы уже. данный файл сохранен в txt ну или можно csv
И нужно данные каталоги скопировать в назначенную папку, например сказано скопировать в папку:
D:\Foto\
И получится:
D:\Foto\test\1
D:\Foto\test\2
D:\Foto\test\4\1\
D:\Foto\test\4\2\2\1
Или указать чтобы было на 1 каталог ниже:
D:\Foto\1
D:\Foto\2
D:\Foto\4\1\
D:\Foto\4\2\2\1

Пробовал и циклом, то вроде бы копирует только файлы раз, а потом ошибка что он уже существует, и нет такой же структуры.

Kazun
17-07-2018, 10:01
robocopy

::
:: Copy options :
::
/S :: copy Subdirectories, but not empty ones.
/E :: copy subdirectories, including Empty ones.
/LEV:n :: only copy the top n LEVels of the source directory tree.


PS > robocopy D:\test D:\Foto /S /E /LEV:2
PS > tree D:\Foto
D:\FOTO
├───1
├───2
└───4

PS > robocopy D:\test D:\Foto /S /E /LEV:3
D:\FOTO
├───1
├───2
└───4
├───1
└───2

YuS_2
17-07-2018, 18:53
1 вопрос: »
как сказали выше, это вполне можно осуществить с помощью robocopy, но если требуется именно на powershell, то:
B этих папках есть файлы уже. данный файл сохранен в txt ну или можно csv
И нужно данные каталоги скопировать в назначенную папку, например сказано скопировать в папку:
D:\Foto\»

function copy-rec ($a,$b){
begin{$splt = $a.split('\')[-1]}
process{
$fdst = $b+$(-join ($arr = $_.directoryname -split "($splt)")[2..$arr.length])
if(!(test-path $fdst)){md "$fdst"|out-null}
copy $_.fullname $fdst -force
}
}
# исходный и целевой каталоги, фильтры
$src_c = 'D:\test'
$dst_c = 'D:\Foto'
$flt = '*.txt','*.csv'

# копируем с сохранением структуры непустых каталогов
dir "$src_c\*" -rec -force -inc $flt|?{!$_.psiscontainer}|copy-rec $src_c $dst_c




© OSzone.net 2001-2012